% \iffalse meta-comment
% !TEX program  = XeLaTeX
% !TEX encoding = UTF-8
%<*internal>
\iffalse
%</internal>
%<*internal>
\fi
\def\nameofplainTeX{plain}
\ifx\fmtname\nameofplainTeX\else
  \expandafter\begingroup
\fi
%</internal>
%<*install>
\input docstrip.tex
\askforoverwritefalse
\preamble
----------------------------------------------------------------
nuaathesis --- Thesis Template for Nanjing University of Aeronautics and Astronautics
Licensed under the Apache License, Version 2.0
See http://www.apache.org/licenses/LICENSE-2.0
----------------------------------------------------------------

\endpreamble
\postamble

Copyright (C) 2020 by nuaatug

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

This work consists of the file  nuaathesis.dtx
and the derived files           nuaathesis.ins,
                                nuaathesis.cls,
                                nuaathesis.cfg and
                                nuaathesis.pdf

\endpostamble
\usedir{tex/latex/nuaathesis}
\generate{
  \file{nuaathesis.cls}{\from{\jobname.dtx}{cls}}
  \file{nuaathesis.cfg}{\from{\jobname.dtx}{cfg}}
}
%</install>
%<install>\endbatchfile
%<*internal>
\usedir{source/latex/nuaathesis}
\generate{
  \file{\jobname.ins}{\from{\jobname.dtx}{install}}
}
\nopreamble\nopostamble
\usedir{doc/latex/nuaathesis}
\generate{
  \file{dtx-style.sty}{\from{\jobname.dtx}{dtx-style}}
}
\ifx\fmtname\nameofplainTeX
  \expandafter\endbatchfile
\else
  \expandafter\endgroup
\fi
%</internal>
%<*driver>
\ProvidesFile{nuaathesis.drv}[2021/05/16 v2.3 NUAA thesis template]
\documentclass{ltxdoc}
\usepackage{dtx-style}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
  \DocInput{\jobname.dtx}
\end{document}
%</driver>
% \fi
% \CheckSum{0}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
% \DoNotIndex{\newenvironment,\@bsphack,\@empty,\@esphack,\sfcode}
% \DoNotIndex{\addtocounter,\label,\let,\linewidth,\newcounter}
% \DoNotIndex{\noindent,\normalfont,\par,\parskip,\phantomsection}
% \DoNotIndex{\providecommand,\ProvidesPackage,\refstepcounter}
% \DoNotIndex{\RequirePackage,\setcounter,\setlength,\string,\strut}
% \DoNotIndex{\textbackslash,\texttt,\ttfamily,\usepackage}
% \DoNotIndex{\begin,\end,\begingroup,\endgroup,\par,\\}
% \DoNotIndex{\if,\ifx,\ifdim,\ifnum,\ifcase,\else,\or,\fi}
% \DoNotIndex{\let,\def,\xdef,\edef,\newcommand,\renewcommand}
% \DoNotIndex{\expandafter,\csname,\endcsname,\relax,\protect}
% \DoNotIndex{\Huge,\huge,\LARGE,\Large,\large,\normalsize}
% \DoNotIndex{\small,\footnotesize,\scriptsize,\tiny}
% \DoNotIndex{\normalfont,\bfseries,\slshape,\sffamily,\interlinepenalty}
% \DoNotIndex{\textbf,\textit,\textsf,\textsc}
% \DoNotIndex{\hfil,\par,\hskip,\vskip,\vspace,\quad}
% \DoNotIndex{\centering,\raggedright,\ref}
% \DoNotIndex{\c@secnumdepth,\@startsection,\@setfontsize}
% \DoNotIndex{\ ,\@plus,\@minus,\p@,\z@,\@m,\@M,\@ne,\m@ne}
% \DoNotIndex{\@@par,\DeclareOperation,\RequirePackage,\LoadClass}
% \DoNotIndex{\AtBeginDocument,\AtEndDocument}
%
%\GetFileInfo{\jobname.drv}
%
%\title{
%  \textsf{nuaathesis} --- 南京航空航天大学学位论文 \LaTeX{} 模板
%}
%\author{
%  nuaatug\thanks{https://github.com/nuaatug}
%}
%\date{\fileversion{} Released \filedate}
%
%\maketitle
%
% \pagestyle{fancy}
% \begin{multicols}{2}[
%   \setlength{\columnseprule}{.4pt}
%   \setlength{\columnsep}{18pt}]
%   \tableofcontents
% \end{multicols}
% \clearpage
%
% \changes{v2.3}{2021/05/16}{根据 2021 年本科模板更新封面。}
% \changes{v2.2}{2020/05/24}{同步学校的新本科模板。}
% \changes{v2.1}{2018/11/01}{初步实现英文、日文论文格式，基本去除对 \CTeX{} 的依赖。}
% \changes{v2.0}{2017/9/17}{仿照 \cquthesis{}，使用 \textsc{DocStrip}，使用根据校 Word 模板直接计算出的行间距等距离，添加硕/博士模板，重写大部分代码。}
% \changes{v1.0}{2017/6/22}{\nuaathesis{} 正式通过毕业设计审核，增加毕业设计/毕业论文选项，并调整页眉；针对双面打印选项调整页脚；细节调整。}
% \changes{v0.92}{2017/6/5}{增加 biblatex 对 natbib 支持，如citep可以直接在行中引用编号， citet可以引用作者 (这里貌似仍然是个 bug, 理论上应该是引用题目，还没仔细研究。)； 添加subcaption和caption包，修复bicaption参数； 添加多列图片示例代码；多处细节调整。}
% \changes{v0.91a}{2017/5/12}{添加双语标题和标题中使用脚注用例；增加几个默认宏包，方便使用；部分细节修调整。}
% \changes{v0.91}{2017/3/15}{使用开源Fandol字体替代华文字体和思源雅黑字体。}
% \changes{v0.9a}{2017/3/14}{加入使脚注出现在页脚线下方的代码，加入模板更新记录。}
% \changes{v0.9}{2017/3/14}{跨版发布，代码重构，模板基本实现，开始由Git进行版本控制，进入微调阶段。}
% \changes{v0.3}{2013/6/4}{加入对团队报告的支持，加入几个宏包，加一些预定义符号。}
% \changes{v0.2}{2013/5/29}{详情未知。}
% \changes{v0.1}{2013/5/18}{详情未知。}
% \changes{v0.0}{2013/5/15}{模板发布。}
%
% \def\indexname{代码索引}
% \def\glossaryname{更新记录}
% \IndexPrologue{\clearpage\section{\indexname}}
% \GlossaryPrologue{\section{\glossaryname}}
%
% \section{欢迎}
%
% \nuaathesis{} 是南京航空航天大学毕业论文的 \LaTeX{} 模板，支持学士、硕士、博士论文的排版。
% 合理使用本模板可以减轻论文撰写过程中修改格式的工作量。
%
% 本模板按《南京航空航天大学本科生毕业设计（论文）撰写规范》（2008年修订版）和
% 《南京航空航天大学研究生学位论文撰写要求》（2011年6月修订版）编写，
% 力求合规、简洁、用户友好、易于维护。本模板的特色有：
% \begin{itemize}
%   \item 支持本科（毕业设计、论文）、硕士、博士的毕业论文；
%   \item 内置封面、承诺书、摘要、目录等论文部件；
%   \item 兼容 Windows、Linux、macOS 等常见系统；
%   \item 支持中、英、日三种论文语言。
% \end{itemize}
%
% 本文档会尽可能详细介绍模板的使用方法，如有不清楚的地方可以参考示例文档和源代码。
%
% \subsection{系统要求}
% 本模板用到的宏包较多，有些宏包需要比较新的版本，推荐使用最新的 \TeX~Live 发行版。
%
% 如果您使用系统（Debian、ArchLinux 等）软件包里的 \TeX~Live 的话，
% 请使用系统软件包管理器，安装 \TeX~Live 的以下 collection：
% \verb|langchinese, latexextra, science, pictures, fontsextra|。
%
% 如果您使用从 \TeX~Live 官网下载光盘镜像、或是在线安装的话，请使用 \verb|.ci| 目录（可能被隐藏）下的
% \verb|install.bat| (Windows) 或 \verb|install.sh| 来安装 \TeX~Live 宏包。
% 因为 Windows 的脚本需要 PowerShell，如果脚本无法运行的话，
% 请根据 \verb|.ci/texlive.pkgs| 中列出的宏包清单，手工逐个安装。
%
% 除了 \TeX~Live 发行版外，
% Windows 用户也可以使用 MiK\TeX 发行版，它会在编译文档时自动安装所需的依赖项
% （也可以参考 \TeX~Live 的宏包列表手动安装）。
%
% \subsection{获取模板}
% 您可以从 \url{https://github.com/nuaatug/nuaathesis} 获取本模板的源代码，
% 或者从 Release 里下载代码压缩包（强烈推荐后者）。
%
% 如果您正在用这份模板来撰写学位论文，建议您利用 GitHub 的 Watch 按钮，
% 订阅模板的讨论与更新信息。
%
% 表~\ref{tab:contents} 列出了 \nuaathesis{} 的主要文件及其功能：
% \begin{table}[H]
% \centering
% \caption{模板源代码内容}
% \label{tab:contents}
% \begin{tabular}{>{\ttfamily}l|p{8cm}} \toprule
% {\heiti 文件（夹）} & {\heiti 功能描述}\\ \midrule
% nuaathesis.dtx & 本模板和文档源代码 \\
% nuaathesis.bst & 参考文献样式 \\ \midrule
% build.sh/bat & 编译脚本 \\
% demo\_chs/ & 带完整目录结构的中文示例文档 \\
% demo\_*/ & 其他示例文档 \\
% logo/ & 论文封面、页眉所需用到的图片 \\ \bottomrule
% \end{tabular}
% \end{table}
%
% 本模板利用 \textsc{DocStrip} 将源代码与文档封装在 \verb|nuaathesis.dtx| 一个文件里，
% 这个文件无法直接在文档中使用，必须先经过编译，然后在文档中使用编译输出的 \verb|nuaathesis.cls|。
% 如果您获取的源代码中不带有编译结果，请运行 \verb|build.bat/sh| 来编译本模板。
%
% 编译完成后，请将表~\ref{tab:required} 列出的文件复制到论文的目录。
% \iffalse
% 表~\ref{tab:compiled} 列出了 \verb|nuaathesis.dtx| 编译后产生的文件与作用：
% \begin{table}[H]
% \centering
% \caption{\texttt{nuaathesis.dtx} 编译输出内容}
% \label{tab:compiled}
% \begin{tabular}{>{\ttfamily}l|p{8cm}} \toprule
% {\heiti 文件（夹）} & {\heiti 功能描述}\\\midrule
% nuaathesis.cls & 主模板 \\
% nuaathesis.cfg & 修改主模板加载行为的配置文件（可选） \\ \midrule
% nuaathesis.pdf & 本文档 \\
% dtx-style.sty  & 本文档的样式文件 \\ \bottomrule
% \end{tabular}
% \end{table}
% \fi
% \begin{table}[H]
% \centering
% \caption{\nuaathesis{} 论文所需文件}
% \label{tab:required}
% \begin{tabular}{>{\ttfamily}l|p{8cm}} \toprule
% {\heiti 文件（夹）} & {\heiti 功能描述}\\\midrule
% nuaathesis.cls & 主模板 \\
% nuaabib.bst & 参考文献样式 \\
% logo/ & 封面、页眉所需图片 \\ \midrule
% nuaathesis.cfg & 修改主模板加载行为的配置文件（可选） \\
% nuaathesis.pdf & 本文档（可选） \\ \bottomrule
% \end{tabular}
% \end{table}
%
% \note{由于本模板还处在开发阶段，可能无法保持向后兼容性，请将使用的模板版本复制到论文目录下，不推荐系统全局安装。}
%
% \subsection{快速上手}
% 为了方便演示代码的效果，请参考/修改附带的示例文档。
%
% 本模板没有使用依赖于特定 \LaTeX 引擎的特性，所以您可以使用任意 \CTeX 支持的 \LaTeX 引擎进行编译，
% 推荐使用 \XeLaTeX{} 作引擎，并使用 latexmk 来自动化编译流程。
% up\LaTeX、pdf\LaTeX、\LaTeX 理论上也能够编译中文文档，但不保证能编译出正确结果。
%
% 注：\option{lang=ja} 只支持 up\LaTeX 引擎。
%
% \section{使用说明}
% 本节介绍在使用本文档类写作时，可能会用到的、由本文档类提供的功能。
%
% \subsection{文档类选项}
% \DescribeOption{degree=}
% 选择论文的类型，必选，当前支持 \option{bachelor}、\option{master} 和 \option{doctor}。
%
% \DescribeOption{type=}
% 本科生指定文档是毕业论文 \option{paper} 或者是毕业设计 \option{design}。
%
% \DescribeOption{zhuanshuo}
% 专硕，只会影响封面中的两个字段，默认不启用。
% \sout{（因为想不出合适的英文翻译，所以就用拼音了）}
%
% \DescribeOption{blindtrail}
% \changes{v2.3}{2021/05/16}{添加盲审开关}
% 盲审，将会用 $\times\times\times$ 代替学校与个人信息。
%
% \DescribeOption{blankleft}
% 如果指定了 \option{openright} 并开启了本选项，左侧的空白页将变成没有页眉页脚的完全白纸。
%
% \DescribeOption{abstractopenright}
% 如果指定了 \option{openright} 并开启了本选项，每个摘要页也将从奇数页开始。
%
% \DescribeOption{lang=}
% 选择论文的主语言，将影响加载的底层文档类，当前支持 \option{cn}（默认）、\option{en} 和 \option{ja}。
%
% \DescribeOption{fontset=}
% 指定 \CTeX{} 使用的中文字体，这个参数将原样传递给 \CTeX，具体的用法请参阅 \CTeX{} 文档。
%
% \DescribeOption{AutoFakeBold}
% 也会传递给 \CTeX{}，具体用法请参阅 xeCJK 或 fontspec 的手册。
%
% \warn{
% 某些 \LaTeX{} 环境在启用 AutoFakeBold 后，会导致 PDF 复制文本的结果是乱码，影响论文的查重。
% 启用后，请务必检查 PDF 导出 TXT 的结果，如果乱码，请尝试更新 \LaTeX{} 宏包，或者禁用本选项。
% }
%
% \DescribeOption{nobold}
% 禁止本模板使用粗体。在不启用 \option{AutoFakeBold} 的情况下，如果字体不自带粗体，会产生
% \texttt{LaTeX Font Warning}。此时可以通过本选项，来消除这些警告。
%
% \DescribeOption{*}
% 其他参数将传递给对应的底层文档类，常用的有 \option{openany}、\option{openright}、\option{oneside}、\option{twoside} 等。
%
% 在生成单面打印或电子阅读版的论文时，推荐使用 \option{openany}, \option{oneside}；
%
% 在生成双面打印的论文时，推荐使用 \option{openright}, \option{blankleft}, \option{twoside}。
%
% \subsection{论文信息}
% 论文信息主要包含两部分：封面页（\cs{nuaaset}）和摘要页（\env{abstract} 环境与 \cs{keywords}）。
% 这三个宏将设置中文信息，同理还定义了带 \verb|En| 后缀、带 \verb|Ja| 后缀的 3 个宏，
% 分别设置英文和日文的论文信息。
%
% \subsubsection*{中文信息}
% \DescribeMacro{\nuaaset}
% 该宏将设置论文的中文信息，它能接受一个 kvoption 的参数，
% 无论论文语言是什么，该参数内的信息都默认按中文处理（可以用 \cs{jpn} 之类的宏来标注文字语言）。
% 它可以包含以下信息：
%
% \DescribeOption{title=}
% 论文的标题，如果需要手工换行，请使用 \cs{linebreak}，并保证“\textbackslash”前没有空格；
%
% 注：该空格会影响本科的声明页、硕/博士页眉的论文标题，中、日文不能有空格，英文必须有空格。
%
% \DescribeOption{author=} 作者的姓名；
%
% \DescribeOption{college=} 学院；
%
% \DescribeOption{advisers=}
% 指导教师的名字，如果需要指定多位指导教师，请用英文逗号分割，
% 本科封面上将会把所有人的名字写在一行，用顿号分割；
% 硕士封面上将会每人的名字将独立占用一行。
%
% \DescribeOption{applydate=}
% 封面日期，如果不指定的话，将会使用当前系统日期。
%
% \textbf{本科生}还支持以下参数：
%
% \DescribeOption{major=} 专业名称；
%
% \DescribeOption{studentid=} 学号；
%
% \DescribeOption{classid=} 班号；
%
% \DescribeOption{industrialadvisers=} 企业导师；
%
% \textbf{硕/博士}还支持以下参数：
%
% \DescribeOption{libraryclassid=} 中图分类号，如果需要指定多个，请手动添加合适的分隔符，
% 模板目前不会替换里面出现的英文逗号；
%
% \DescribeOption{subjectclassid=} 学科分类号；
%
% \DescribeOption{thesisid=} 论文编号；
%
% \DescribeOption{majorsubject=} 学科、专业；
%
% \DescribeOption{researchfield=} 研究方向；
%
% \subsubsection*{英文信息}
% \DescribeMacro{\nuaasetEn}
% 该宏将设置论文的英文信息，它能接受一个 kvoption 的参数，
% \textbf{除了}标题外，其他参数只能由\textbf{硕/博士}使用设置，它可以包含以下信息：
%
% \DescribeOption{title=}
% 论文的标题，如果需要手工换行，请使用 \cs{linebreak}，并保证“\textbackslash”前\textbf{有空格}；
%
% \DescribeOption{advisers=}
% 指导教师，与中文不同，这里不会作任何处理。
%
% \DescribeOption{degreefull=}
% 英文底部学位全称。
%
% \DescribeOption{*}
% \option{college}、
% \option{majorsubject}、
% \option{author}、
% \option{applydate}、
% 这些参数与中文封面的含义完全一致。
%
% \subsubsection*{日文信息}
% \DescribeMacro{\nuaasetJa}
% 该宏将设置论文的日文信息，它能接受一个 kvoption 的参数，
% 无论论文语言是什么，该参数内的信息都默认按日文处理（可以用 \cs{zhcn} 之类的宏来标注文字语言）。
% 目前只能用来设置标题。
%
% \DescribeOption{title=}
% 论文的标题，如果需要手工换行，请使用 \cs{linebreak}，并保证“\textbackslash”前没有空格；
%
% \subsubsection*{摘要页}
% \DescribeEnv{abstract}
% 环境，包括 \env{abstract}、\env{abstractEn} 和 \env{abstractJa}，
% 用于定义不同语言摘要页的内容。
%
% \DescribeMacro{\keywords}
% 包括 \cs{keywords}、\cs{keywordsEn} 和 \cs{keywordsJa}。
% 设置摘要页上的关键词，用英文逗号分隔，输出时模板会使用合适的符号进行连接。
%
% \subsection{定理环境}
% 因为本模板提供了多种定理环境编号方式，并且编号格式没有固定的使用方式，
% 因此没有定义任何定理环境，所有环境都需要作者在导言中（使用以下3个宏）定义。
%
% \begin{macro}{\nuaatheoremg}
% \oarg{refname}\marg{name}\marg{label}
% 定义一个定理环境，计数器不会重置。
% 环境的名字是 \marg{name}，输出时标签是 \marg{label}，引用时的标签为 \oarg{refname}。
% 如果 \oarg{refname} 为空，则默认为 \marg{label}。
% 宏的全名为 \verb|NUAA Theorem Global|。
% \end{macro}
%
% \begin{macro}{\nuaatheoremchap}
% \oarg{refname}\marg{name}\marg{label}
% 定义一个定理环境，每个章节单独计数。
%
% 即：使用这个宏定义的定理环境，它们的编号有重复。
%
% 环境的名字是 \marg{name}，输出时标签是 \marg{label}，引用时的标签为 \oarg{refname}。
% 如果 \oarg{refname} 为空，则默认为 \marg{label}。
% 宏的全名为 \verb|NUAA Theorem CHAPter|。
% \end{macro}
%
% \begin{macro}{\nuaatheoremchapu}
% \oarg{refname}\marg{name}\marg{label}
% 定义一个定理环境，与其他同方法声明的环境变量共享一个计数器。
%
% 即：使用这个宏定义的定理环境，它们的编号不会有重复。
%
% 环境的名字是 \marg{name}，输出时标签是 \marg{label}，引用时的标签为 \oarg{refname}。
% 如果 \oarg{refname} 为空，则默认为 \marg{label}。
% 按照 \pkg{hyperref} 文档里的代码改写而成，
% 宏的全名为 \verb|NUAA Theorem CHAPter Unified|。
% \end{macro}
%
% \subsection{字体}
% 大部分场合下，模板会自动指定字体和大小。
% 但可能有地方仍然需要手工指定字体（比如续表的表头），请使用对应的 \texttt{nuaafont*} 开头的宏。
%
% 学校的字体规定在有些地方比较迷，按常理来说，字体可以分为衬线体与无衬线体，
% 在不同语言中可能有不同的别称，如：
%
% \begin{table}[H]
% \centering
% \begin{tabular}{cccc} \toprule
% 类型 & 英文 & 中文 & 日文 \\ \midrule
% 衬线 & \cs{rmfamily} \textrm{Roman, Serif} & \cs{songti} \songti 宋体 & \cs{mcfamily} \songti 明朝体 \\
% 无衬线 & \cs{sffamily} \textsf{Sans-serif} & \cs{heiti} \heiti 黑体 & \cs{gtfamily} \heiti ゴシック体 \\ \bottomrule
% \end{tabular}
% \caption{本模板依赖的6个主要字体宏}
% \end{table}
%
% 在学校要求中，大部分标题的中文是黑体（无衬线）的，但部分标题的英文却要求是 Times New Roman（衬线）。
% 当前模板只能根据英文字体，自动设置对应的中文/日文字体，因此在部分标题上，可能无法设置成符合学校规定的字体。
%
% 如果觉得 \CTeX 和/或对应的文档类的字体不够美观的话，可以按以下步骤修改字体，
% 需要注意的是以下步骤只适用于 \XeLaTeX 环境。
%
% 修改一个中文字体需要两条命令，可以参考 \verb|demo_chs/global.tex| 开头被 \cs{iffalse} 注释掉的那段代码，
% 它同时修改了宋体与黑体。
% \begin{latex}
% % 加载字体，字体名称可以参考 fc-list 的运行结果
% \setCJKfamilyfont{\CJKrmdefault}[BoldFont=Noto Serif CJK SC Bold]{Noto Serif CJK SC}
% % 重定义宋体
% \renewcommand\songti{\CJKfamily{\CJKrmdefault}}
% % 同理，加载黑体的字体（这里选择字重稍粗的 Medium 作普通字体）
% \setCJKfamilyfont{\CJKsfdefault}[BoldFont=Noto Sans CJK SC Bold]{Noto Sans CJK SC Medium}
% % 重定义黑体
% \renewcommand\heiti{\CJKfamily{\CJKsfdefault}}
% \end{latex}
%
% 除了英文、数学，以及上述 6 种字体外，本模板还用到了楷体 \cs{kaishu}，
% 但只在硕士封面上用于学院名称和日期。
% 最后一种用到的“字体”是简启体，只用于硕士封面的校名，
% 由于版权、安装使用不便、所需字形固定等各种原因，简启体的校名将作为 PDF 格式的图片插入。
%
% \section{更新方法}
% 本节将介绍在保留论文代码基本不变的情况下，更新模板代码。
%
% 在更新原论文使用的模板之前，请务必先\textbf{完整备份}所有文件，
% 以防意外导致无法还原、也无法用任何模板版本编译的情况。
%
% 如果版本号变化没有在本节中出现的话，直接将新版的 \texttt{nuaathesis.cls} 替换旧模板即可
%（大概，如果版本号比较接近的话）；
% 否则请务必按照本节中描述的步骤进行修改。
%
% \subsection{v2.1 更新至 v2.1b}
% \begin{enumerate}
%   \item 用新版的 \texttt{nuaathesis.cls} 替换同名旧模板文件；
%   \item 将 \texttt{nuaabib.bst} 解压到论文目录；
%   \item 修改论文主文件，将 \cs{bibliographystyle}\texttt{\{nuaathesis\}} 改为 \cs{bibliographystyle}\texttt{\{nuaabib\}}；
%   \item 对于专硕同学，在论文主文件开头的文档类选项中，添加 \texttt{zhuanshuo} 以使用专硕封面。
% \end{enumerate}
%
% \subsection{v2.1b 更新至 v2.2}
% 本次更新适配了 2020 年新版的本科模板。
% \begin{enumerate}
%   \item 复制或替换下列文件（夹）：\texttt{nuaathesis.cls}、\texttt{nuaabib.bst} 和 \texttt{logo/}；
%   \item 修改 \texttt{bachelor.tex}：把开头的模板类选项里的 \texttt{openany,oneside} 修改为 \texttt{openany,twoside}；
% 根据新模板样例，调整 \mac{appendix} 以后内容的顺序；
%   \item 修改 \texttt{global.tex}：将 \mac{nuaaset} 中的 \texttt{classid} 修改为实际班级的名称（而不是编号），
% 添加或修改 \texttt{thesisid}，删除 \texttt{footmisc} 宏包的导入；
%   \item 修改 \texttt{manref.tex} 和 \texttt{acknowledge.tex} 的标题，将原来的 \mac{chapter}
% 修改成新模板样例中的 \mac{chapter*} 和 \mac{addcontentsline}（如果存在）。
% \end{enumerate}
%
% \section{外文特辑}
% 本节将介绍外国语论文时的注意事项。
%
% 为了避免外文内容中使用中文格式、字体，本模板选择加载原生的外文文档类，并尽量避免使用 \CTeX 的特性。
%
% 但由于学校的论文模板中没有提及外文的格式，知网上的本校外文（硕士）学位论文格式又是五花八门，
% 所以没能总结出值得信任的标准，请打算用外文写学位论文的准毕业生提前与指导老师确认格式是否有问题。
% 欢迎在 GitHub\footnote{\url{https://github.com/nuaatug/nuaathesis/issues/new}} 上指正格式问题，
% 笔者会在第一时间修正模板，使其符合规范的。
%
% \subsection{英文}
% 英文环境下（即文档参数\option{lang=en}），本模板将加载 \verb|book| 文档类。
% 基本与中文环境兼容，可以在正文中直接使用中文。
%
% \subsubsection*{已知问题}
% 部分英文格式没有确定下来，目前只参照中文的格式、姑且按笔者的直觉设置了一下，包括不限于：
% \begin{itemize}
%   \item 各级标题的前后缀、字体、大小写
%   \item 正文段落缩进
%   \item 定理环境的字体（是否斜体、大小写）
%   \item 摘要页顺序、等
% \end{itemize}
%
% \subsection{日文}
% 日文环境下（即文档参数\option{lang=ja}），本模板将加载 \verb|ujbook| 文档类，
% 因为使用了 \CTeX，所以本模板只能使用 \verb|uplatex+dvipdfmx| 进行编译。
%
% 由于当多的中/日汉字共用相同的编码，且在不同语言中有字形差别，因此必须根据文字语言选择正确的字体。
% 本模板会在加载完 \CTeX{} 后，将默认字体恢复成 mc 和 gt。
% 如果论文指定了其他字体的话，请重新定义 \cs{CJKrmdefault}、\cs{CJKsfdefault} 和 \cs{CJKttdefault}。
%
% 以后版本可能会考虑使用别的中文方案，比如 \pkg{pxbabel}
% \footnote{\href{https://qiita.com/zr_tex8r/items/5c14042078b20edbfb07\#\%E4\%B8\%AD\%E5\%9B\%BD\%E8\%AA\%9E\%E9\%9F\%93\%E5\%9B\%BD\%E8\%AA\%9E\%E3\%81\%AE\%E6\%89\%B1\%E3\%81\%84}{https://qiita.com/zr\_tex8r/items/5c14042078b20edbfb07\#中国語韓国語の扱い}}。
%
% \subsubsection*{日文论文+部分中文}
%
% 即指定了 \option{lang=ja} 的前提下，需要在文中使用中文。
% 由于这种情况下，本模板默认已经加载好了所需要的字体，可以直接使用 \cs{zhcn} 宏来标注中文内容，如：
% \begin{latex}
% \zhcn{汉字} 漢字
% \end{latex}
%
% 由于限定了使用 up\LaTeX{} 引擎，它的字体修改方法于 \XeLaTeX{} 完全不同。
% 推荐使用 \pkg{otf} 和 \pkg{pxchfon}。使用方法大致就是在 preamble 部分加上：
% \begin{latex}
% \usepackage[deluxe,uplatex]{otf}
% \usepackage[noto-otc]{pxchfon}
% \end{latex}
%
% \subsubsection*{中文论文+部分日文}
%
% 即指定了 \option{lang=cn} 的前提下，需要在文中使用日文。
% 建议先加载合适的日文字体，并使用 \cs{jpn} 来标注（设置）字体。
%
% 在 \XeLaTeX 环境下，加载日文字体的方法可以参考加载中文字体的步骤，
% 以下代码摘抄自 \verb|demo_chs/global.tex| 第2段被 \cs{iffalse} 注释掉的代码。
% \begin{latex}
% \setCJKfamilyfont{mc}[BoldFont=Noto Serif CJK JP Bold]{Noto Serif CJK JP}
% \newcommand\mcfamily{\CJKfamily{mc}}
% \setCJKfamilyfont{gt}[BoldFont=Noto Sans CJK JP Bold]{Noto Sans CJK JP}
% \newcommand\gtfamily{\CJKfamily{gt}}
% \end{latex}
%
% 这段代码定义了本模板依赖的 \cs{mcfamily} 和 \cs{gtfamily} 两个设置日文字体的宏，
% 定义完后，就可以在中文论文中使用 \cs{jpn} 来设置正确的字体了，如：
% \begin{latex}
% 汉字 \jpn{漢字}  % 注意论文中（而非本文档）两个 “字” 的差别
% \end{latex}
%
% \subsubsection*{已知问题}
% 日文的封面、摘要页的格式是个谜，完成度很低，目前只是「適当に」设置了一下。
%
% 模板中没有提到的格式细节（如特殊页面、定理环境）也是按照笔者的直觉设置的，
% 很可能不符合评审老师的要求，因此在交稿前务必与指导老师确认格式是否正确。
%
% 还有，日文（特指 up\LaTeX）环境下，\pkg{ulem} 提供的 \cs{uline} 仍然无法自动换行，
% 如果可以的话，请使用其他宏包代替
% \footnote{\href{https://texwiki.texjp.org/?TeX\%E3\%81\%8C\%E8\%8B\%A6\%E6\%89\%8B\%E3\%81\%A8\%E3\%81\%99\%E3\%82\%8B\%E5\%87\%A6\%E7\%90\%86\#t65559ac}{https://texwiki.texjp.org/?TeXが苦手とする処理\#t65559ac}}，
% 比如\pkg{jumoline}（不在 CTAN 上，需手工下载安装，然后用该宏包里的 \cs{Underline} 代替 \cs{uline}。
% 具体地说，在文档 preamble 部分加上以下代码。）
% \begin{latex}
% \usepackage{jumoline}
% \renewcommand\uline[1]{\Underline{#1}}
% \end{latex}
%
% 此外，在使用 \cs{em} 宏时会出错，导致无法使用 biber。
%
% \section{已知问题}
% \begin{itemize}
% \item 中文标点禁则无效：
% 如果前一行的行末是英文/宏，后面接着的中文标点正好需要换行时，
% 中文标点的禁则可能无法生效。原因可以参考这个 issue
% \footnote{\url{https://github.com/CTeX-org/ctex-kit/issues/364}}。
% 这是一个比较尴尬且麻烦的中文 \TeX{} 问题，本模板目前不考虑做任何处理。
% 如果使用 \XeLaTeX{} 引擎的话，可以在中文标点前加上 \cs{xeCJKnobreak} 来防止换行。
%
% \item 间距不一致：
% 由于 \LaTeX{} 的常用排版算法与 Word 有些差异，如果要像素级复现学校模板，
% 需要对已有的宏包的内部实现做进一步定制，难度很大也不利于维护。
%
% \item 参考文献
% \end{itemize}
%\StopEventually{
%  \PrintChanges
%  \PrintIndex
%}
%
% \section{致谢}
% 这个模板是站在巨人肩膀上的成果，感谢为本模板提供基本框架的 \cquthesis{}，
% 感谢在 \href{https://tex.stackexchange.com/}{tex.se} 上解答问题的大神们，
% 感谢在 GitHub 上提供反馈的 @MonFig、@Phantato、@Yohoa 等人。
% 世界因你们而美好。
%
% \section{实现细节}
%
% \subsection{模板信息}
%    \begin{macrocode}
%<cls>\NeedsTeXFormat{LaTeX2e}
%<cls>\ProvidesClass{nuaathesis}
%<cfg>\ProvidesFile{nuaathesis.cfg}
%<cls|cfg>[2021/05/16 v2.3 NUAA Thesis Template]
%    \end{macrocode}
% \subsection{配置文件}
% \changes{v2.1}{2018/06/01}{修改了配置文件作用，不再存放常量，加载顺序改为开头，默认内容为空。}
% 配置文件的内容将于模板加载前期执行，一般内容为空（或者连文件都不存在），
% 主要用于存放必须在模板加载前执行的代码，例如修改本模板加载的宏包参数。
%    \begin{macrocode}
%<cls>\InputIfFileExists{nuaathesis.cfg}{}{}
%    \end{macrocode}
%
% 原本存放在配置文件里的字符串常量，已移动到模板主文件；
% 如果需要修改，请使用 \cs{renewcommand} 重定义对应的宏。
% （因为宏的名称里有 \verb|@| 符号，所以需要用到 \cs{makeatletter} 和 \cs{makeatother}。）
%
% 封面页上用到的字符串：
%    \begin{macrocode}
%<*cls>
\AtEndOfClass{
\newcommand\nuaa@label@nuaa{南京航空航天大学}
\newcommand\nuaa@label@nuaajc{南京航空航天大学金城学院}
\newcommand\nuaa@label@worktype@paper{毕业论文}
\newcommand\nuaa@label@worktype@design{毕业设计}
\newcommand\nuaa@label@worktype@bachelor{本科毕业设计（论文）}
\newcommand\nuaa@label@worktype@master{硕士学位论文}
\newcommand\nuaa@label@worktype@doctor{博士学位论文}
\newcommand\nuaa@label@thesisnum{编号}
\newcommand\nuaa@label@title{题\quad 目}
\newcommand\nuaa@label@teamname{团队名称}
\newcommand\nuaa@label@author{学生姓名}
\newcommand\nuaa@label@studentid{学\hfill 号}
\newcommand\nuaa@label@college{学\hfill 院}
\newcommand\nuaa@label@department{系\hfill 部}
\newcommand\nuaa@label@major{专\hfill 业}
\newcommand\nuaa@label@classid{班\hfill 级}
\newcommand\nuaa@label@adviser{指\hfill 导\hfill 教\hfill 师}
\newcommand\nuaa@label@industrialadviser{企\hfill 业\hfill 导\hfill 师}
\newcommand\nuaa@label@researchername{研究生姓名}
\newcommand\nuaa@label@majorsubject{学科、专业}
\newcommand\nuaa@label@researchfield{研\hfill 究\hfill 方\hfill 向}
\newcommand\nuaa@label@professionaltype{专\hfill 业\hfill 类\hfill 别}
\newcommand\nuaa@label@professionalfield{专\hfill 业\hfill 领\hfill 域}
\newcommand\nuaa@label@graduateschool{研究生院}
\newcommand\nuaa@labelEn@nuaa{Nanjing University of Aeronautics and Astronautics}
\newcommand\nuaa@labelEn@graduateschool{The Graduate School}
%    \end{macrocode}
% 摘要页用到的字符串：
%    \begin{macrocode}
\newcommand\nuaa@label@abstract{摘\qquad 要}
\newcommand\nuaa@label@abstractshort{摘要}
\newcommand\nuaa@label@keywords{关键词：}
\newcommand\nuaa@label@keywordsep{，}
\newcommand\nuaa@label@abstract@toc{摘要}
\newcommand\nuaa@labelEn@abstract{Abstract}
\newcommand\nuaa@labelEn@ABSTRACT{ABSTRACT}
\newcommand\nuaa@labelEn@KeyWords{KEY WORDS: }
\newcommand\nuaa@labelEn@keywords{Keywords: }
\newcommand\nuaa@labelEn@keywordsep{, }
\newcommand\nuaa@labelJa@abstract{要 旨}
\newcommand\nuaa@labelJa@keywords{キーワード：}
\newcommand\nuaa@labelJa@keywordsep{、}
%    \end{macrocode}
% 目录部分用到的字符串：
%    \begin{macrocode}
\newcommand\nuaa@label@reportpaper{毕业设计（论文）报告纸}
%    \end{macrocode}
% 语言相关
%    \begin{macrocode}
\ifnuaa@lang@cn
  \renewcommand\contentsname{目\qquad 录}
  \newcommand\listfiguretablename{图表清单}
  \def\equationautorefname{式}
  \def\AMSautorefname{式}
\else\ifnuaa@lang@en
  \newcommand\listfiguretablename{List of Figures and Tables}
\else\ifnuaa@lang@ja
  \newcommand\listfiguretablename{図 表 目 次}
  \renewcommand\bibname{参考文献}
  \def\equationautorefname{式}
  \def\AMSautorefname{式}
\fi\fi\fi
}
%    \end{macrocode}
% \subsection{文档类的选项与参数}
% \subsubsection{定义与读取}
% 使用 \pkg{kvoptions} 来处理传给本文档类的参数。
%    \begin{macrocode}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{
  family=nuaa,
  prefix=nuaa@,
  setkeys=\kvsetkeys
}
%    \end{macrocode}
% 定义用户类型，目前支持本科、硕士、博士三类。
%    \begin{macrocode}
\newif\ifnuaa@bachelor \nuaa@bachelorfalse
\newif\ifnuaa@master   \nuaa@masterfalse
\newif\ifnuaa@doctor   \nuaa@doctorfalse
\define@key{nuaa}{degree}{
  \expandafter\csname nuaa@#1true\endcsname}
%    \end{macrocode}
% 定义硕士类别（专硕）
%    \begin{macrocode}
\DeclareBoolOption[false]{zhuanshuo}
%    \end{macrocode}
% 定义盲审开关。
%    \begin{macrocode}
\DeclareBoolOption[false]{blindtrail}
%    \end{macrocode}
% 定义论文的主语言
%    \begin{macrocode}
\newif\ifnuaa@lang@cn \nuaa@lang@cnfalse
\newif\ifnuaa@lang@en \nuaa@lang@enfalse
\newif\ifnuaa@lang@ja \nuaa@lang@jafalse
\define@key{nuaa}{lang}{
  \expandafter\csname nuaa@lang@#1true\endcsname}
%    \end{macrocode}
% 定义文档类型是毕业论文还是毕业设计。
%    \begin{macrocode}
\newif\ifnuaa@worktype@paper  \nuaa@worktype@paperfalse
\newif\ifnuaa@worktype@design \nuaa@worktype@designfalse
\define@key{nuaa}{type}{
  \expandafter\csname nuaa@worktype@#1true\endcsname}
%    \end{macrocode}
% 右开时空白的左页是否让页眉页脚空白
%    \begin{macrocode}
\DeclareBoolOption[false]{blankleft}
%    \end{macrocode}
% 摘要页也需要右开
%    \begin{macrocode}
\DeclareBoolOption[false]{abstractopenright}
%    \end{macrocode}
% 中文字体（传递给\CTeX）
%    \begin{macrocode}
\DeclareStringOption{fontset}
%    \end{macrocode}
% 是否在封面/摘要页上禁用粗体（推荐使用 fandol 之类字体时启用）
%    \begin{macrocode}
\DeclareBoolOption[false]{nobold}
%    \end{macrocode}
% 准备第一遍参数解析，主要获取上述定义的参数，暂时忽略其余的参数。
% 剩余的参数将于第二遍解析时，传递给对应的基文档类。
%    \begin{macrocode}
\DeclareDefaultOption{}
%    \end{macrocode}
% 开始第一遍参数解析
%    \begin{macrocode}
\kvsetkeys{nuaa}{}
\ProcessKeyvalOptions*
%    \end{macrocode}
% \subsubsection{合法性检查与常量定义}
% 必须指定用户类型
%    \begin{macrocode}
\ifnuaa@bachelor\relax\else
\ifnuaa@master\relax\else
\ifnuaa@doctor\relax\else
  \ClassError{nuaathesis}{
    Thesis Degree must be specified: \MessageBreak
    degree=[bachelor|master|doctor]}
\fi\fi\fi
%    \end{macrocode}
% 本科生必须指定文档类型；硕士、博士默认为论文，且必须选择论文。
%    \begin{macrocode}
\ifnuaa@bachelor
\else
  \ifnuaa@worktype@design
    \ClassError{nuaathesis}{You should submit paper instead of design}
  \else
    \nuaa@worktype@papertrue
  \fi
\fi
%    \end{macrocode}
% 默认论文的主语言是中文。
%    \begin{macrocode}
\ifnuaa@lang@cn\relax\else
  \ifnuaa@lang@en\relax\else
    \ifnuaa@lang@ja\relax\else
      \nuaa@lang@cntrue
    \fi
  \fi
\fi
%    \end{macrocode}
% 根据学校信息，定义对应图标。
%    \begin{macrocode}
\iffalse
  \newcommand\nuaa@university{\secretize{\nuaa@label@nuaajc}}
  \newcommand\nuaa@universityLogo{nuaa-jc.jpg}
\else
  \newcommand\nuaa@university{\secretize{\nuaa@label@nuaa}}
  \newcommand\nuaa@universityLogo{nuaa.pdf}
\fi
%    \end{macrocode}
% 根据文档类型，设置文档的中文名称。
%    \begin{macrocode}
\newcommand\nuaa@worktypecn{%
  \ifnuaa@bachelor%
    \nuaa@label@worktype@bachelor%
  \else%
    \ifnuaa@master%
      \nuaa@label@worktype@master%
    \else%
      \nuaa@label@worktype@doctor%
    \fi%
  \fi%
}
%    \end{macrocode}
% \subsubsection{文档信息收集}
% 首先为每种语言定义一个存访数据的 key-value
%    \begin{macrocode}
\def\nuaaset{\kvsetkeys{nuaa@value}}
\def\nuaasetEn{\kvsetkeys{nuaa@valueEn}}
\def\nuaasetJa{\kvsetkeys{nuaa@valueJa}}
%    \end{macrocode}
%
% \begin{macro}{\nuaa@define}
% 定义一个字段，同时定义设置该字段的全局宏。
%    \begin{macrocode}
\def\nuaa@define #1{
  \define@key{nuaa}{#1}{\csname #1\endcsname{##1}}
  \expandafter\gdef\csname #1\endcsname##1{
    \expandafter\gdef\csname nuaa@#1\endcsname{##1}}
  \csname #1\endcsname{}
}
\def\nuaa@define@sec #1{
  \define@key{nuaa}{#1}{\csname #1\endcsname{##1}}
  \expandafter\gdef\csname #1\endcsname##1{
    \expandafter\gdef\csname nuaa@#1\endcsname{\secretize{##1}}}
  \csname #1\endcsname{}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\nuaa@define@list}
% \marg{field}\marg{sep}
% 定义一个字段，同时定义设置该字段的全局宏；
% 与前者不同的是，它在设置字段时，能将逗号分隔的值用 \marg{sep} 连接起来。
%    \begin{macrocode}
\def\nuaa@define@list#1#2{
  \define@key{nuaa}{#1}{\csname #1\endcsname{##1}}
  \expandafter\gdef\csname nuaa@#1\endcsname{}
  \expandafter\gdef\csname nuaa@#1@pdf\endcsname{}
  \expandafter\gdef\csname #1\endcsname##1{
    \@for\reserved@a:=##1\do{
      \expandafter\ifx\csname nuaa@#1\endcsname\@empty\else
        \expandafter\g@addto@macro\csname nuaa@#1\endcsname{%
          \ignorespaces #2}
        \expandafter\g@addto@macro\csname nuaa@#1@pdf\endcsname{,}
      \fi
      \expandafter\expandafter\expandafter\g@addto@macro%
        \expandafter\csname nuaa@#1\expandafter\endcsname\expandafter{\reserved@a}
    }
    \expandafter\gdef\csname nuaa@#1@pdf\endcsname{##1}
  }
}
\def\nuaa@define@list@sec#1#2{
  \define@key{nuaa}{#1}{\csname #1\endcsname{##1}}
  \expandafter\gdef\csname nuaa@#1\endcsname{}
  \expandafter\gdef\csname nuaa@#1@pdf\endcsname{}
  \expandafter\gdef\csname #1\endcsname##1{
    \ifnuaa@blindtrail
      \expandafter\gdef\csname nuaa@#1\endcsname{\secretize{}}
    \else
      \@for\reserved@a:=##1\do{
        \expandafter\ifx\csname nuaa@#1\endcsname\@empty\else
          \expandafter\g@addto@macro\csname nuaa@#1\endcsname{%
            \ignorespaces #2}
          \expandafter\g@addto@macro\csname nuaa@#1@pdf\endcsname{,}
        \fi
        \expandafter\expandafter\expandafter\g@addto@macro%
          \expandafter\csname nuaa@#1\expandafter\endcsname\expandafter{\reserved@a}
      }
      \expandafter\gdef\csname nuaa@#1@pdf\endcsname{##1}
    \fi
  }
}
%    \end{macrocode}
% \end{macro}
%
% 文档的中文信息
% \changes{v2.1}{2018/06/01}{修正 typo: advisor->adviser}
% \changes{v2.3}{2021/05/16}{添加企业导师 industrialadvisers}
%    \begin{macrocode}
\nuaa@define{value@title}
\nuaa@define@sec{value@author}
\nuaa@define@sec{value@college}
\nuaa@define{value@applydate}
\ifnuaa@bachelor
  \nuaa@define@list@sec{value@advisers}{、}
  \nuaa@define@list@sec{value@industrialadvisers}{、}
\else
  \nuaa@define@list@sec{value@advisers}{\linebreak}
  \nuaa@define@list@sec{value@industrialadvisers}{、}
\fi
  \nuaa@define@sec{value@major}
  \nuaa@define@sec{value@studentid}
  \nuaa@define@sec{value@classid}
  \nuaa@define{value@libraryclassid}
  \nuaa@define{value@subjectclassid}
  \nuaa@define{value@thesisid}
  \nuaa@define{value@majorsubject}
  \nuaa@define{value@researchfield}
%    \end{macrocode}
%
% 文档的英文信息
%    \begin{macrocode}
\nuaa@define{valueEn@title}
\ifnuaa@bachelor\relax
\else
\fi
  \nuaa@define@sec{valueEn@college}
  \nuaa@define{valueEn@majorsubject}
  \nuaa@define@sec{valueEn@author}
  \nuaa@define@sec{valueEn@advisers}
  \nuaa@define{valueEn@degreefull}
  \nuaa@define{valueEn@applydate}
%    \end{macrocode}
%
% 文档的日文信息
%    \begin{macrocode}
\nuaa@define{valueJa@title}
%    \end{macrocode}
%
%
% 摘要页
%    \begin{macrocode}
\RequirePackage{etoolbox}
\RequirePackage{environ}
\newcommand{\nuaa@@abstract}[1]{\long\gdef\nuaa@abstract{#1}}
\newenvironment{abstract}{\Collect@Body\nuaa@@abstract}{}
\newcommand{\nuaa@@abstractEn}[1]{\long\gdef\nuaa@abstractEn{#1}}
\newenvironment{abstractEn}{\Collect@Body\nuaa@@abstractEn}{}
\newcommand{\nuaa@@abstractJa}[1]{\long\gdef\nuaa@abstractJa{#1}}
\newenvironment{abstractJa}{\Collect@Body\nuaa@@abstractJa}{}
\nuaa@define@list{keywords}{\nuaa@label@keywordsep}
\nuaa@define@list{keywordsEn}{\nuaa@labelEn@keywordsep}
\nuaa@define@list{keywordsJa}{\nuaa@labelJa@keywordsep}
%    \end{macrocode}
%
% 收集一些常用字段
%    \begin{macrocode}
\ifnuaa@lang@cn
  \newcommand\nuaa@title{\nuaa@value@title}
\else\ifnuaa@lang@en
  \newcommand\nuaa@title{\nuaa@valueEn@title}
\else\ifnuaa@lang@ja
  \newcommand\nuaa@title{\nuaa@valueJa@title}
\fi\fi\fi
%    \end{macrocode}
% \subsection{主文档类}
% 本节将第二次解析参数、加载基文档类、设置全局的格式，如页面大小、字号、行间距等，并定义标题字体。
%
% 首先解释一下本节会出现的几个 Magic Number，以及它们是如何计算出来的。
%
% 根据要求，本科生论文字号为小四(12~pt)，行间距为1.5~倍。
% 考虑到学校提供的 Word 模板启用了文档网络，跨度为 15.874016~pt，所以小四号字只占用一行，
% 行间距需修正为 $15.874 \times 1.5 = 23.811$~pt\footnote{\url{https://www.zhihu.com/question/26397264/answer/48165229}}。
% 再考虑到用 \verb|\zihao| 在选择字号时，\CTeX 会将 \verb|\f@baselineskip|
% 设置成 \verb|\f@size| 的 1.2 倍，
% 所以最终设置行间距为 $23.811 \div (12 \times 1.2) = 1.653543$。
%
% 同理，硕/博士论文字号为五号(10.5~pt)，行间距为20~pt。
% 因为行间距是固定值，所以 Word 的文档网络不会影响行间距。
% 行间距最终设置为 $20 \div (10.5 \times 1.2) \approx 1.5873$。
%
% 注：Word 中的单位“磅(pt)” 是 $1/72$~inch，对应 \LaTeX 中的 $1$~bp。
%
%    \begin{macrocode}
\RequirePackage{expl3}
\ExplSyntaxOn
\sys_if_engine_xetex:TF{
  \PassOptionsToPackage{no-math}{fontspec}
}{}
\ExplSyntaxOff
%    \end{macrocode}
% 加载文档类之前，确保文档类不会干扰数学字体。
%    \begin{macrocode}
\RequirePackage{amsmath}
%    \end{macrocode}
% \pkg{ctex} 与 \pkg{amsmath} 貌似有些不兼容，需要提前加载 \pkg{amsmath}\footnote{\url{https://github.com/ElegantLaTeX/ElegantBook/issues/59}}。
%
% \subsubsection{中文的文档类}
% 直接使用 \cls{ctexbook}
%    \begin{macrocode}
\ifnuaa@lang@cn
  \DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{ctexbook}}
  \ProcessKeyvalOptions*
  \ifnuaa@bachelor
    \PassOptionsToClass{zihao=-4,linespread=1.653543}{ctexbook}
  \else
    \PassOptionsToClass{zihao=5,linespread=1.5873}{ctexbook}
  \fi
  \PassOptionsToClass{a4paper,scheme=chinese,space=auto,UTF8}{ctexbook}
  \ifx\nuaa@fontset\@empty\relax
    \PassOptionsToClass{fontset=\nuaa@fontset}{ctexbook}
  \fi
  \LoadClass{ctexbook}
%    \end{macrocode}
% 利用 \CTeX 提供接口，将图表清单里 chapter 之间的空隙修改为0
%    \begin{macrocode}
  \ctexset{chapter = {
    lofskip = 0pt,
    lotskip = 0pt
  }}
%    \end{macrocode}
% 定义各级标题的字体，英文设置为 Sans，中文设置成黑体
%    \begin{macrocode}
  \newcommand\nuaa@font@title{\sffamily\heiti}
%    \end{macrocode}
% 定义图表清单中“图x.xx”的长度
%    \begin{macrocode}
  \newcommand\nuaa@indentloft{3.5pc}
%    \end{macrocode}
% 定义一级标题的编号格式
%    \begin{macrocode}
  \newcommand\nuaa@chaptername\CTEX@chaptername
%    \end{macrocode}
% 中文的所有段落都需要首行缩进，包括标题行后的那一段
%    \begin{macrocode}
  \PassOptionsToPackage{indentafter}{titlesec}
%    \end{macrocode}
%
% \subsubsection{英文的文档类}
% 英文的文档使用最普通的 \cls{book}
%    \begin{macrocode}
\else\ifnuaa@lang@en
  \DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{book}}
  \ProcessKeyvalOptions*
  \PassOptionsToClass{a4paper}{book}
  \LoadClass{book}
%    \end{macrocode}
% 标题字体，只设置了英文为 Sans
%    \begin{macrocode}
  \newcommand\nuaa@font@title{\sffamily}
%    \end{macrocode}
% 定义图表清单中“Figure x.xx”的长度
%    \begin{macrocode}
  \newcommand\nuaa@indentloft{5.0pc}
%    \end{macrocode}
% 定义一级标题的前缀
%    \begin{macrocode}
  \newcommand\nuaa@chaptername{\@chapapp\space \thechapter}
%    \end{macrocode}
% 英文的格式仍未确定，目前按照中文格式，首段首行缩进。
%    \begin{macrocode}
  \PassOptionsToPackage{indentafter}{titlesec}
%    \end{macrocode}
%
% \subsubsection{日文的文档类}
% 日文的文档使用 \cls{ujbook}
%    \begin{macrocode}
\else\ifnuaa@lang@ja
  \DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{ujbook}}
  \ProcessKeyvalOptions*
  \PassOptionsToClass{uplatex,a4paper}{ujbook}
  \LoadClass{ujbook}
%    \end{macrocode}
% 多字重支持
%    \begin{macrocode}
  \RequirePackage[deluxe, uplatex]{otf}
%    \end{macrocode}
% 标题字体，英文设置为 Sans，日文设置为 ゴシック体
%    \begin{macrocode}
  \newcommand\nuaa@font@title{\sffamily\gtfamily}
%    \end{macrocode}
% 定义图表清单中“図x.xx”的长度
%    \begin{macrocode}
  \newcommand\nuaa@indentloft{3.5pc}
%    \end{macrocode}
% 定义一级标题的前缀
%    \begin{macrocode}
  \newcommand\nuaa@chaptername{\@chapapp\thechapter\@chappos}
%    \end{macrocode}
% 日文的所有段落都需要首行缩进，包括标题行后的那一段
%    \begin{macrocode}
  \PassOptionsToPackage{indentafter}{titlesec}
\fi\fi
%    \end{macrocode}
% \subsubsection{共用代码}
% 加载完基文档类后，再加载 \pkg{ctex} 来使用中文字体，并设置全局默认字号、行间距。
%    \begin{macrocode}
  \ifnuaa@bachelor
    \PassOptionsToPackage{zihao=-4,linespread=1.625}{ctex}
  \else
    \PassOptionsToPackage{zihao=5,linespread=1.5873}{ctex}
  \fi
  \PassOptionsToPackage{scheme=plain}{ctex}
  \ifx\nuaa@fontset\@empty\relax
    \PassOptionsToPackage{fontset=\nuaa@fontset}{ctex}
  \fi
  \RequirePackage{ctex}
%    \end{macrocode}
%
% patch 图表清单中章之间的空隙。
%
% 务必在用 \pkg{titlesec} 修改标题样式前 patch，
% 否则 patch 会失败。
%    \begin{macrocode}
  \typeout{Patching list of figure/table in chapter}
  \patchcmd{\@chapter}
    {\addtocontents{lof}{\protect\addvspace{10\p@}}}
    {}
    {\typeout{lof-ok}}
    {\typeout{lof-FAIL}}
  \patchcmd{\@chapter}
    {\addtocontents{lot}{\protect\addvspace{10\p@}}}
    {}
    {\typeout{lot-ok}}
    {\typeout{lot-FAIL}}
\fi
%    \end{macrocode}
% 如果文档编译先生成 DVI 再生成 PDF，需要做一些设置。
%    \begin{macrocode}
\ExplSyntaxOn
\sys_if_engine_xetex:TF{}{
  \sys_if_output_dvi:TF{
    \PassOptionsToPackage{dvipdfmx}{graphicx}
    \PassOptionsToPackage{dvipdfmx}{hyperref}
    \def\pgfsysdriver{pgfsys-dvipdfm.def}
  }{}
}
%    \end{macrocode}
% 对于日文，在加载完 ctex 后恢复默认字体。
%    \begin{macrocode}
\sys_if_engine_uptex:T{
  \renewcommand \CJKrmdefault { mc }
  \renewcommand \CJKsfdefault { gt }
  \renewcommand \CJKttdefault { mc }
}
\ExplSyntaxOff
%    \end{macrocode}
% \begin{macro}{\nuaa@textbf}
% 根据选项，将参数使用粗体或普通字体输出
%    \begin{macrocode}
\ifnuaa@nobold
  \newcommand\nuaa@textbf[1]{#1}
\else
  \newcommand\nuaa@textbf[1]{\textbf{#1}}
\fi
%    \end{macrocode}
% \end{macro}
% 加载宏包，只加载本模板必须的，以及常用的、需要调整参数的宏包，
% 其他宏包需要手动加载。
%    \begin{macrocode}
\RequirePackage{geometry}  % 页边距
\RequirePackage{fancyhdr}  % 页眉页脚
\RequirePackage[perpage,flushmargin]{footmisc}  % 脚注
\RequirePackage{titlesec}  % 各级标题
\RequirePackage{titletoc}  % 目录
\RequirePackage[numbers,square,comma,super,sort&compress]{natbib}
\PassOptionsToPackage{normalem}{ulem}
\RequirePackage{ulem}      % 英文下划线
\RequirePackage{graphicx}  % 图
\RequirePackage{array}
\RequirePackage{tabu}
\RequirePackage{booktabs}  % toprule, etc
\RequirePackage{multicol}
\RequirePackage{caption}   % DeclareCaptionFont
\RequirePackage{hyperref}
\urlstyle{same} % 在使用\url时保持相同字体
\RequirePackage{ifxetex}
\RequirePackage{siunitx}
\RequirePackage{amsthm}
\RequirePackage{amssymb}
\RequirePackage{aliascnt} % newaliascnt/aliascntresetthe
\RequirePackage[inline]{enumitem}
\RequirePackage{floatrow} % 替代原 float 包
\floatsetup[table]{style=plaintop}
\ifnuaa@lang@ja
  \RequirePackage{pxjahyper}
\fi
%    \end{macrocode}
%
% \subsection{格式设置}
% \subsubsection{字体}
% 学校的 Word 模板要求英文使用 Monotype 的 Times New Roman\textsuperscript{\textregistered}，
% 但这不是一个免费字体，对于非 Windows 平台会不友好。
% 这里使用字形相似的 \pkg{newtx} 代替
%    \begin{macrocode}
\RequirePackage[defaultsups]{newtxtext}
\RequirePackage{newtxmath}
%    \end{macrocode}
% \begin{macro}{zhcn}
% 为了方便在非中文环境下（特指日文）使用正确的中文字体，定义了一个根据英文字体选择中文字体的宏。
% 之所以动用 \pkg{expl3} 是因为来自 \pkg{xstring} 的 \cs{IfStrEq}（和另一个实现方法）会把 True
% False 分支都输出到 PDF 书签里，结果一个书签里的中文重复出现了若干遍。
%
% 注：原本打算命名为 \cs{chs} (CHinese Simplified) 的，但是这个名字被占用了。
%
% \changes{v2.1}{2020/02/08}{修正 \mac{str\_if\_eq\_x:nnTF} 被 deprecated 导致编译失败的问题（不兼容旧版 \TeX~Live 2017）。}
%    \begin{macrocode}
\ExplSyntaxOn
\cs_set:Npn \zhcn #1{
  \str_if_eq:eeTF{\f@family}{\rmdefault}
  {{\songti#1}}{
  \str_if_eq:eeTF{\f@family}{\sfdefault}
  {{\heiti#1}}{
  \str_if_eq:eeTF{\f@family}{\ttdefault}
  {{\kaiti#1}}{#1}
  }}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{jpn}
% 同理设置一个日文的字体转换宏，主要用于日文论文的中文摘要环境下，偶尔出现的日语。
%    \begin{macrocode}
\cs_set:Npn \jpn #1{
  \str_if_eq:eeTF{\f@family}{\rmdefault}
  {{\mcfamily#1}}{
  \str_if_eq:eeTF{\f@family}{\sfdefault}
  {{\gtfamily#1}}{#1}
  }}
\ExplSyntaxOff
%    \end{macrocode}
% \end{macro}
% \subsubsection{文档组成声明}
% \LaTeX 文档可以拆分成 \mac{frontmatter}, \mac{mainmatter}, \mac{appendix}, \mac{backmatter}
% 并由这些宏来调整文档格式。本文档类也需要利用这些信息来调整文档格式，于是重新定义了这些宏。
%    \begin{macrocode}
\newif\if@frontmatter
\newif\if@backmatter
\newif\ifnuaa@mainmatter
\let\nuaa@frontmatter\frontmatter
\let\nuaa@mainmatter\mainmatter
\let\nuaa@appendix\appendix
\let\nuaa@backmatter\backmatter
\renewcommand{\frontmatter}{
  \nuaa@frontmatter
  \@frontmattertrue
  \@backmatterfalse
  \nuaa@mainmatterfalse
  \ifnuaa@bachelor
    \pagenumbering{roman}
    \assignpagestyle{\chapter}{style@footonly}
  \else
    \pagenumbering{Roman}
    \pagestyle{style@main}
  \fi
}
\renewcommand{\mainmatter}{
  \nuaa@mainmatter
  \@frontmatterfalse
  \@backmatterfalse
  \nuaa@mainmattertrue
  \pagenumbering{arabic}
  \pagestyle{style@main}
  \setlength\leftskip{\nuaaparleft}
  \assignpagestyle{\chapter}{style@main}
}
\renewcommand{\backmatter}{
  \nuaa@backmatter
  \@frontmatterfalse
  \@backmattertrue
  \nuaa@mainmatterfalse
  \setlength\nuaaparleft{0pt}
  \setlength\leftskip{\nuaaparleft}
}
\renewcommand{\appendix}{
  \nuaa@appendix
  \@frontmatterfalse
  \@backmatterfalse
  \nuaa@mainmatterfalse
}
%    \end{macrocode}
%
% \subsubsection{段落左侧缩进}
%
% \sout{特色}残缺功能，曾经本科论文的需求。
%
% 这个功能只适配了部分定理环境、列表项，所有会改动段落缩进的地方都需要单独适配；
% 可以参考本模板中 \cs{nuaafontparleft} 的用法，来适配您所需要的环境。
% \begin{macro}{\nuaaparleft}
% 定义段落左侧缩进量，本科全语言一律缩进 2 中文字符，硕/博士论文没有缩进。
%    \begin{macrocode}
\newlength\nuaaparleft
\ifnuaa@bachelor
  \setlength\nuaaparleft{0pt}
\else
  \setlength\nuaaparleft{0pt}
\fi
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\nuaafontparleft}
% 然后在字体设置的地方，使用这个宏来实现段落缩进。
%    \begin{macrocode}
\newcommand\nuaafontparleft{
  \addtolength\@totalleftmargin{\nuaaparleft}
  \addtolength\linewidth{-\nuaaparleft}
  \parshape 1 \nuaaparleft \linewidth
}
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{页边距}
% 本节使用 \pkg{geometry} 来设置页边距，适用于大部分页面，
% 封面、承诺书等特殊页面的页边距将单独设置。
%
% 本科生的页边距沿用前一版本的设定（实际上是不知道 Word 里图片与文字混排的行高算法）；
% 硕/博士的页边距是根据要求计算出来的。
% \texttt{headheight}和\texttt{footskip}是五号字的行高（考虑文档网络），
% $\texttt{headsep} = 3.3\text{cm}-2.6\text{cm}-15.6\text{pt} \approx 0.15\text{cm}$。
%    \begin{macrocode}
\ifnuaa@bachelor \geometry{
  top=2.5cm,
  bottom=2cm,
  left=2.5cm,
  right=2cm,
  headheight=15.874bp,
  headsep=1.75bp,
} \else \geometry{
  top=3.3cm,
  bottom=3.3cm,
  left=3.0cm,
  right=2.8cm,
  headheight=15.6bp,
  headsep=0.15cm,
  footskip=15.6bp
}
\fi
%    \end{macrocode}
% \subsubsection{页眉页脚}
% 本节利用 \pkg{fancyhdr} 来设置页眉页脚的样式。
%
% 页脚用的页码修饰，本科正文和附录部分的页码，与目录里的页码格式不一样，
% 这里提供一个宏来定义页脚的页码格式。
%    \begin{macrocode}
\newcommand\nuaa@footerpagenum@decorate[1]{%
\ifnuaa@bachelor%
  \fontsize{10.5bp}{15.874bp}\selectfont%
  \if@frontmatter{#1}\else{- #1 -}\fi%
\else%
  {#1}%
\fi%
}
%    \end{macrocode}
%
% 定义空白的页眉页脚，用于封面页和空白页。
%    \begin{macrocode}
\fancypagestyle{style@empty}{
  \fancyhf{}
  \renewcommand{\headrulewidth}{0pt}
  \renewcommand{\footrulewidth}{0pt}
}
%    \end{macrocode}
%
% 定义本科摘要、目录用的样式。
%    \begin{macrocode}
\fancypagestyle{style@footonly}{
  \fancyhf{}
  \fancyfoot{}
  \if@twoside
    \fancyfoot[OR,EL]{\footnotesize{\nuaa@footerpagenum@decorate{\thepage}}}
  \else
    \fancyfoot[R]{\footnotesize{\nuaa@footerpagenum@decorate{\thepage}}}
  \fi
  \renewcommand{\headrulewidth}{0pt}
  \renewcommand{\footrulewidth}{0pt}
}
%    \end{macrocode}
%
% 定义正文页眉页脚。为了在 |oneside| 模式下，硕/博的页眉也能奇偶页不同，
% 因此不能用 \cs{fancyhead} 的 |EC| |OC| 选项，而是在代码里判断页码的奇偶性，输出对应的内容。
%    \begin{macrocode}
\fancypagestyle{style@main}{
  \fancyhead{}
  \fancyhead[C]{\ifodd\value{page}
    {\mbox{\songti\zihao{5}\nuaa@university\nuaa@worktypecn}}
  \else
    \ifnuaa@bachelor
      \ifnuaa@mainmatter
        {\mbox{\songti\zihao{5}\leftmark}}
      \else
        {\mbox{\songti\zihao{5}\nuaa@university\nuaa@worktypecn}}
      \fi
    \else
      {\mbox{\zihao{5}\nuaa@title}}
    \fi
  \fi}
  \fancyfoot{}
  \if@twoside
    \fancyfoot[OR,EL]{\footnotesize{\nuaa@footerpagenum@decorate{\thepage}}}
  \else
    \fancyfoot[R]{\footnotesize{\nuaa@footerpagenum@decorate{\thepage}}}
  \fi
  \renewcommand{\headrulewidth}{0.75bp}
  \renewcommand{\footrulewidth}{0pt}
}
%    \end{macrocode}
%
% 脚注：设置单倍行间距，取消脚注到页脚的间隔。
%    \begin{macrocode}
\renewcommand*{\footnotelayout}{\linespread{1}\fontsize{9bp}{15.874bp}\selectfont}
%\setlength{\footnotesep}{6.374bp}
%    \end{macrocode}
% \subsubsection{各级标题}
% 本节设置各级标题的字体、字号、行间距、编号格式等。
% \mac{chapter} 会在页首引入一定空格，计算方法未知，除此以外都是仿照 Word 的格式准确设置。
%    \begin{macrocode}
\ifnuaa@bachelor
  \renewcommand\thesubsubsection{（\arabic{subsubsection}）}
  \titleformat{\chapter}
    {\centering\linespread{1}\nuaa@font@title\fontsize{15bp}{31.748bp}\selectfont}
    {\nuaa@chaptername}{1em}{}
  \titlespacing*{\chapter}{0pt}{\ifnuaa@mainmatter{-5bp}\else{-20.874bp}\fi}{0bp}
  \titleformat*{\section}
    {\linespread{1.0}\nuaa@font@title\fontsize{14bp}{31.748bp}\selectfont}
  \titlespacing*{\section}{0pt}{0bp}{0bp}
  \titleformat*{\subsection}
    {\linespread{1.0}\nuaa@font@title\fontsize{12bp}{23.811bp}\selectfont}
  \titlespacing*{\subsection}{0pt}{0bp}{0bp}
  \titleformat*{\subsubsection}
    {\linespread{1.0}\fontsize{12bp}{23.811bp}\selectfont}
  \titlespacing*{\subsubsection}{0pt}{0bp}{0bp}
\else
  \titleformat{\chapter}
    {\centering\linespread{1.0}\nuaa@font@title\fontsize{15bp}{20bp}\selectfont}
    {\nuaa@chaptername}{1em}{}
  \titlespacing*{\chapter}{0pt}{10.4bp}{23.4bp}
  \assignpagestyle{\chapter}{style@main}
  \titleformat*{\section}
    {\linespread{1.0}\nuaa@font@title\fontsize{14pt}{20pt}\selectfont}
  \titlespacing*{\section}{0pt}{7.8bp}{7.8bp}
  \titleformat*{\subsection}
    {\linespread{1.0}\nuaa@font@title\fontsize{12bp}{20bp}\selectfont}
  \titlespacing*{\subsection}{0pt}{7.8bp}{7.8bp}
  \titleformat*{\subsubsection}
    {\linespread{1.0}\nuaa@font@title\fontsize{12bp}{20bp}\selectfont}
  \titlespacing*{\subsubsection}{0pt}{7.8bp}{7.8bp}
\fi
%    \end{macrocode}
%
% 正文中对大标题~三级标题（subsubsection）进行编号。
% \changes{v2.1b}{2018/12/03}{修正三级标题的编号}
%    \begin{macrocode}
\setcounter{secnumdepth}{3}
%    \end{macrocode}
%
% \subsubsection{目录}
% 本节利用 \pkg{titletoc} 来设置目录的格式，包括正文目录和图表的目录。
%    \begin{macrocode}
\newcommand\nuaa@toc@rule{.57ex}
\ifnuaa@bachelor
  \newcommand\nuaa@toc@font{\fontsize{12bp}{15.874bp}\selectfont}
  \ifnuaa@lang@en
    \titlecontents{chapter}[5pc]
      {\nuaa@toc@font}
      {\contentslabel[\chaptername~\thecontentslabel]{5pc}}
      {\renewcommand\thecontentslabel{\relax}\hspace*{-5pc}}
      {\titlerule*[\nuaa@toc@rule]{.}\contentspage}
  \else
    \titlecontents{chapter}[5.5pc]
      {\nuaa@toc@font}
      {\contentslabel[\thecontentslabel]{3.5pc}}
      {\hspace*{-3.5pc}}
      {\titlerule*[\nuaa@toc@rule]{.}\contentspage}
  \fi
  \titlecontents{section}[6.5pc]
    {\nuaa@toc@font}
    {\contentslabel[\thecontentslabel]{3.5pc}}
    {}
    {\titlerule*[\nuaa@toc@rule]{.}\contentspage}
  \titlecontents{subsection}[7.5pc]
    {\nuaa@toc@font}
    {\contentslabel[\thecontentslabel]{3.5pc}}
    {}
    {\titlerule*[\nuaa@toc@rule]{.}\contentspage}
  \titlecontents{figure}[\nuaa@indentloft]
    {\nuaa@toc@font}
    {\contentslabel[\figurename~\thecontentslabel]{\nuaa@indentloft}}
    {\figurename}
    {\titlerule*[\nuaa@toc@rule]{.}\contentspage}
  \titlecontents{table}[\nuaa@indentloft]
    {\nuaa@toc@font}
    {\contentslabel[\tablename~\thecontentslabel]{\nuaa@indentloft}}
    {\tablename}
    {\titlerule*[\nuaa@toc@rule]{.}\contentspage}
\else
  \newcommand\nuaa@toc@font{\normalsize}
  \ifnuaa@lang@en
    \titlecontents{chapter}[5pc]
      {\nuaa@toc@font}
      {\contentslabel[\chaptername~\thecontentslabel]{5pc}}
      {\renewcommand\thecontentslabel{\relax}\hspace*{-5pc}}
      {\titlerule*[\nuaa@toc@rule]{.}\contentspage}
  \else
    \titlecontents{chapter}[3.5pc]
      {\nuaa@toc@font}
      {\contentslabel[\thecontentslabel]{3.5pc}}
      {\hspace*{-3.5pc}}
      {\titlerule*[\nuaa@toc@rule]{.}\contentspage}
  \fi
  \titlecontents{section}[3pc]
    {\nuaa@toc@font}
    {\contentslabel[\thecontentslabel]{2pc}}
    {}
    {\titlerule*[\nuaa@toc@rule]{.}\contentspage}
  \titlecontents{subsection}[5pc]
    {\nuaa@toc@font}
    {\contentslabel[\thecontentslabel]{3pc}}
    {}
    {\titlerule*[\nuaa@toc@rule]{.}\contentspage}
  \titlecontents{figure}[\nuaa@indentloft]
    {\nuaa@toc@font}
    {\contentslabel[\figurename~\thecontentslabel]{\nuaa@indentloft}}
    {\figurename}
    {\titlerule*[\nuaa@toc@rule]{.}\contentspage}
  \titlecontents{table}[\nuaa@indentloft]
    {\nuaa@toc@font}
    {\contentslabel[\tablename~\thecontentslabel]{\nuaa@indentloft}}
    {\tablename}
    {\titlerule*[\nuaa@toc@rule]{.}\contentspage}
\fi
%    \end{macrocode}
% \subsubsection{参考文献}
%    \begin{macrocode}
\ifnuaa@bachelor
  \newcommand\nuaa@font@bib{\linespread{1.0}\fontsize{10.5bp}{15.874bp}\selectfont}
\else
  \newcommand\nuaa@font@bib{\linespread{1.0}\fontsize{10.5bp}{15.6bp}\selectfont}
\fi
\pretocmd{\bibliography}
  {\begingroup\nuaa@font@bib}
  {}{}
\apptocmd{\bibliography}
  {\endgroup}
  {}{}
\renewcommand\@biblabel[1]{\nuaa@font@bib[#1]}
\renewenvironment{thebibliography}[1]{
  \chapter*{\bibname}
  \list{\@biblabel{\@arabic\c@enumiv}}
  {
    \settowidth\labelwidth{\@biblabel{#1}}
    \leftmargin\labelwidth
    \advance\leftmargin\labelsep
    \setlength{\parsep}{1mm}
    \setlength{\labelsep}{0.5em}
    \setlength{\itemsep}{-\parsep}
    \setlength{\listparindent}{0in}
    \setlength{\itemindent}{0in}
    \setlength{\rightmargin}{0in}
    \@openbib@code
    \usecounter{enumiv}
    \let\p@enumiv\@empty
    \renewcommand\theenumiv{\@arabic\c@enumiv}
  }
  \sloppy
  \clubpenalty4000
  \@clubpenalty\clubpenalty
  \widowpenalty4000%
  \sfcode`\.\@m
}{
\def\@noitemerr
{\@latex@warning{Empty `thebibliography' environment}}
\endlist \vskip.2in}
%    \end{macrocode}
%
% 将“参考文献”加入目录和 pdf 书签。
%    \begin{macrocode}
\pretocmd{\bibliography}
  {\clearpage\phantomsection\addcontentsline{toc}{chapter}{\bibname}}
  {}{}
%    \end{macrocode}
%
% 另外的引用命令。
%    \begin{macrocode}
\bibpunct{[}{]}{,}{s}{}{,}
\renewcommand\NAT@citesuper[3]{\ifNAT@swa%
  \unskip\kern\p@\textsuperscript{\NAT@@open #1\NAT@@close}%
  \if*#3*\else\ (#3)\fi\else #1\fi\endgroup}
\DeclareRobustCommand\inlinecite{\@inlinecite}
\def\@inlinecite#1{\begingroup\let\@cite\NAT@citenum\citep{#1}\endgroup}
\let\onlinecite\inlinecite
%    \end{macrocode}
% 人工参考文献目录
%    \begin{macrocode}
\newenvironment{manref}{
  \begingroup\nuaa@font@bib
  \begin{list}{\@biblabel{\@arabic\c@enumiv}}{
    \leftmargin\labelwidth
    \advance\leftmargin\labelsep
    \setlength{\parsep}{1mm}
    \setlength{\labelsep}{0.5em}
    \setlength{\itemsep}{-\parsep}
    \setlength{\listparindent}{0in}
    \setlength{\itemindent}{0in}
    \setlength{\rightmargin}{0in}
    \usecounter{enumiv}
    \let\p@enumiv\@empty
    \renewcommand\theenumiv{\@arabic\c@enumiv}
  }
}{
  \end{list}
  \endgroup
}
%    \end{macrocode}
% \begin{macro}{\mcite}
% 配合使用 \cs{label} 来引用手工参考文献目录，只支持单个引用。
% 本质就是 \cs{ref} 左右加方括号。
% \changes{v2.1b}{2018/11/05}{根据学校的要求，将参考文献引用改为上标格式。}
%    \begin{macrocode}
\newcommand\mcite[1]{\textsuperscript{[\ref{#1}]}}
%    \end{macrocode}
% \end{macro}
% \subsection{文档部件}
% \subsubsection{宏包}
% 本节将调整一些常用宏包的参数。
%
% 表格相关
%    \begin{macrocode}
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}

\hypersetup{
  hidelinks,
  bookmarksnumbered=true,
}
%    \end{macrocode}
% \subsubsection{国际单位}
% 使用 \pkg{siunitx} 修正
%    \begin{macrocode}
\ifxetex
\RequirePackage{upgreek}
\sisetup{
  math-micro = {\upmu},
  text-micro = {\textmu},
}
\fi
%    \end{macrocode}
% \subsubsection{自动引用与定理环境}
% 自动引用会在引用的编号前，添加对应的标签。
% 不过由于语言的限制，仅推荐对图、表、式子和定理环境使用自动引用。
%
% 根据语言，定义证明环境的格式，并且定义定理环境样式“nuaaplain”。
%    \begin{macrocode}
\renewcommand\figureautorefname\figurename
\renewcommand\tableautorefname\tablename
\newcommand\subfigureautorefname\figureautorefname
\renewenvironment{proof}[1][\proofname]{
  \pushQED{\qed}%
  \normalfont
  \topsep0pt \partopsep0pt % no space before
  \trivlist
  \nuaafontparleft
  \item[\hskip\labelsep\hskip\parindent
        \nuaa@font@title\selectfont
    #1\@addpunct{:}]\ignorespaces
}{%
  \popQED\endtrivlist\@endpefalse
}
\ifnuaa@lang@cn
  \renewenvironment{proof}[1][\proofname]{
    \pushQED{\qed}%
    \normalfont
    \topsep0pt \partopsep0pt % no space before
    \trivlist
    \nuaafontparleft
    \item[\hskip\labelsep\hskip\parindent
          \nuaa@font@title\selectfont
      #1\@addpunct{:}]\ignorespaces
  }{%
    \popQED\endtrivlist\@endpefalse
  }
  \newtheoremstyle{nuaaplain}
    {0pt}{0pt}
    {\nuaafontparleft}{\parindent}
    {}{：}
    {0em}
    {\nuaa@font@title\selectfont\thmname{#1}\thmnumber{#2}\thmnote{（#3）}}
\else\ifnuaa@lang@en
  \renewenvironment{proof}[1][\proofname]{
    \pushQED{\qed}%
    \normalfont
    \topsep0pt \partopsep0pt % no space before
    \trivlist
    \nuaafontparleft
    \item[\hskip\labelsep\hskip\parindent
          \itshape\selectfont
      #1\@addpunct{:}]\ignorespaces
  }{%
    \popQED\endtrivlist\@endpefalse
  }
  \newtheoremstyle{nuaaplain}
    {0pt}{0pt}
    {\nuaafontparleft\itshape\selectfont}{\parindent}
    {}{:~}
    {0em}
    {\nuaa@font@title\selectfont\thmname{#1}\thmnumber{ #2}\thmnote{ (#3)}}
\else\ifnuaa@lang@ja
  \renewenvironment{proof}[1][\proofname]{
    \pushQED{\qed}%
    \normalfont
    \topsep0pt \partopsep0pt % no space before
    \trivlist
    \nuaafontparleft
    \item[\hskip\labelsep\hskip\parindent
          \nuaa@font@title\selectfont
      #1\@addpunct{:}]\ignorespaces
  }{%
    \popQED\endtrivlist\@endpefalse
  }
  \newtheoremstyle{nuaaplain}
    {0pt}{0pt}
    {\nuaafontparleft}{\parindent}
    {}{: }
    {0em}
    {\nuaa@font@title\selectfont\thmname{#1}\thmnumber{#2}\thmnote{(#3)}}
\fi\fi\fi
%    \end{macrocode}
% \begin{macro}{\nuaatheoremg}
% \oarg{refname}\marg{name}\marg{label}
% 定义一个定理环境，计数器不会重置。
%    \begin{macrocode}
\newcommand\nuaatheoremg[3][\@empty]{
  \newtheorem{#2}{#3}
  \expandafter\gdef\csname #2autorefname\endcsname{% 空格消除
    \expandafter\ifstrempty\expandafter{#1}{#3}{#1}}
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\nuaatheoremchap}
% \oarg{refname}\marg{name}\marg{label}
% 定义一个定理环境，每个章节单独计数。
%    \begin{macrocode}
\newcommand\nuaatheoremchap[3][\@empty]{
  \newtheorem{#2}{#3}[chapter]
  \expandafter\gdef\csname #2autorefname\endcsname{% 空格消除
    \expandafter\ifstrempty\expandafter{#1}{#3}{#1}}
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\nuaatheoremchapu}
% \oarg{refname}\marg{name}\marg{label}
% 定义一个定理环境，与其他同方法声明的环境变量共享一个计数器。
%    \begin{macrocode}
\newcommand\nuaatheoremchapu[3][\@empty]{
  \newaliascnt{#2}{dummytheorem}
  \newtheorem{#2}[#2]{#3}
  \aliascntresetthe{#2}
  \expandafter\gdef\csname #2autorefname\endcsname{% 空格消除
    \expandafter\ifstrempty\expandafter{#1}{#3}{#1}}
}
%    \end{macrocode}
% \end{macro}
% 定义一个随着 chapter 重置的 dummy 定理环境，供 \cs{nuaatheoremchapu} 内部使用。
%    \begin{macrocode}
\newtheorem{dummytheorem}{Dummy}[chapter]
%    \end{macrocode}
% \begin{macro}{\nuaafontcaption}
% 题注字体，如果需要在 \cs{caption} 以外的地方写题注（如 \env{longtable} 续页后），
% 可以使用这个宏来设置正确的字体。（本科特供）
%    \begin{macrocode}
\newcommand\nuaafontcaption{
  \ifnuaa@bachelor
    \nuaa@font@title\linespread{1.0}\fontsize{10.5bp}{15.874bp}\selectfont
  \else
    \normalfont
  \fi
}
%    \end{macrocode}
% \end{macro}
% 题注格式：编号与题注间隔，最后一行居中，以及字体。
% \changes{v2.1b}{2018/12/26}{修正 subfigure 字体}
%    \begin{macrocode}
\captionsetup{labelsep=quad}
\captionsetup{justification=centerlast}
\DeclareCaptionFont{nuaacaption}{\nuaafontcaption}
\captionsetup{font=nuaacaption}
\captionsetup[subfigure]{font=nuaacaption}
\ifnuaa@bachelor
  \captionsetup{skip=0bp}
\fi
%    \end{macrocode}
%
% 表格，按模板设置三线表线条粗细，以及本科表格字体。
%    \begin{macrocode}
\setlength\heavyrulewidth{0.5bp}
\setlength\lightrulewidth{0.5bp}
\setlength\cmidrulewidth{0.5bp}
\ifnuaa@bachelor
  \setlength\heavyrulewidth{1.5bp}
  \setlength\lightrulewidth{0.75bp}
  \setlength\cmidrulewidth{0.75bp}
  \DeclareFloatFont{bachelor}{\linespread{1.0}\fontsize{10.5bp}{15.874bp}\selectfont}
  \floatsetup[table]{font=bachelor}
\fi
%    \end{macrocode}
% \subsubsection{列表环境}
% 使用enumitem宏包配制列表环境，紧凑间距。
%    \begin{macrocode}
\setlist{nosep}
%    \end{macrocode}
% 列表和段落头对齐
%    \begin{macrocode}
\setlist*{leftmargin=*}
\setlist[1]{labelindent=\dimexpr\parindent+\nuaaparleft\relax} %% Only the level 1
%    \end{macrocode}
%
% \subsection{实用命令}
% 本节介绍模板中用到的 utilities（功能不强大，但顾名思义很实在）。
%
% \begin{macro}{\nuaa@dateCn}
% 当前中文日期
%    \begin{macrocode}
\newcommand{\nuaa@dateCn}{
  \zhdigits{\the\year}年\zhnumber{\the\month}月
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\nuaa@dateEn}
% 当前英文日期
%    \begin{macrocode}
\newcommand{\nuaa@dateEn}{
  \ifcase\the\month
  \or January%
  \or February%
  \or March%
  \or April%
  \or May%
  \or June%
  \or July%
  \or August%
  \or September%
  \or October%
  \or November%
  \or December%
  \fi, \the\year
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\cleardoublepage}
% 双面换页（疑似 \CTeX{} feature 修复）。
% 为了产生真正的空白页，需要手动结束当前页，设置页眉页脚，然后再双面换页。
%    \begin{macrocode}
\ifnuaa@blankleft
  \let\nuaa@cleardoublepage\cleardoublepage
  \renewcommand{\cleardoublepage}{
    \clearpage
    {
    \pagestyle{style@empty}
    \nuaa@cleardoublepage
    }
  }
\fi
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\dunderline}
% 可自定义粗细的下划线。
%    \begin{macrocode}
\newcommand\dunderline[3][-1pt]{{%
  \setbox0=\hbox{#3}
  \ooalign{\copy0\cr\rule[\dimexpr#1-#2\relax]{\wd0}{#2}}}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\secretize}
% 如果开启盲审模式，会把参数替换成星号，否则原样输出。
%    \begin{macrocode}
\ifnuaa@blindtrail
  \newcommand{\secretize}[1]{$\times\times\times$}
\else
  \newcommand{\secretize}[1]{#1}
\fi
%    \end{macrocode}
% \end{macro}
% \subsubsection*{绘制关键词}
% 摘要页的关键词部分，如果关键词换行了，需要与第一个关键词左对齐。
%    \begin{macrocode}
\newbox\nuaa@kw
\newcommand{\nuaa@put@kw}[2]{%
  \begingroup
  \setbox\nuaa@kw=\hbox{#1}
  \noindent\hangindent\wd\nuaa@kw\hangafter1
  \box\nuaa@kw#2\par
  \endgroup}
%    \end{macrocode}
%
% \subsubsection*{特殊页面}
% 按照文档的语言、类别，调用实际的宏。
%
% 为了方便辨识，所有具体实现特殊页面绘制的宏的名字都很长。
% 在这里定义了几个封装好的宏给论文作者使用，它们会根据论文的选项，
% 绘制对应版本的页面。
% \begin{macro}{\makecover}
% 绘制封面
%    \begin{macrocode}
\def\makecover{
  \ifnuaa@lang@cn
    \hypersetup{
      pdftitle = {\nuaa@value@title},
      pdfauthor = {\nuaa@value@author},
      pdfkeywords = {\nuaa@keywords@pdf}
    }
  \else\ifnuaa@lang@en
    \hypersetup{
      pdftitle = {\nuaa@valueEn@title},
      pdfauthor = {\nuaa@valueEn@author},
      pdfkeywords = {\nuaa@keywordsEn@pdf}
    }
  \else\ifnuaa@lang@ja
    \hypersetup{
      pdftitle = {\nuaa@valueJa@title},
      pdfauthor = {\nuaa@value@author},
      pdfkeywords = {\nuaa@keywordsJa@pdf}
    }
  \fi\fi\fi
  \pagestyle{style@empty}
  \pagenumbering{Alph}
  \cleardoublepage

  \ifnuaa@bachelor
    \nuaa@make@cover@bachelor
  \else
    \nuaa@make@cover@master@cn
    \nuaa@make@cover@master@en
  \fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\makedeclare}
% 绘制承诺书
%    \begin{macrocode}
\newcommand\makedeclare{
  \ifnuaa@bachelor
    \nuaa@make@declare@bachelor
  \else
    \nuaa@make@declare@master
  \fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\makeabstract}
% 绘制摘要
%    \begin{macrocode}
\newcommand\makeabstract{
  \cleardoublepage

  \ifnuaa@bachelor
    \nuaa@make@abstract@bachelor@cn
    \ifnuaa@lang@ja
      \nuaa@make@abstract@bachelor@ja
    \else
      \nuaa@make@abstract@bachelor@en
    \fi
  \else
    \nuaa@make@abstract@master@cn
    \ifnuaa@lang@ja
      \nuaa@make@abstract@master@ja
    \else
      \nuaa@make@abstract@master@en
    \fi
  \fi
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\nuaatableofcontents}
% 绘制正文目录，本科生“目录”字号（三号）与其他大标题（chapter，小三）不同。
%    \begin{macrocode}
\newcommand\nuaatableofcontents{
  \cleardoublepage
  \chapter*{\contentsname}

  \@starttoc{toc}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\nuaalistoffigurestables}
% 绘制图表清单
%    \begin{macrocode}
\newcommand\nuaalistoffigurestables{
  \clearpage
  \chapter*{\listfiguretablename}
  \@starttoc{lof}
  \bigskip
  \@starttoc{lot}
}
%    \end{macrocode}
% \end{macro}
%
% \subsection{绘制特殊页面}
% 本节定义绘制封面、承诺书和摘要页的代码。
%
% \subsubsection{本科封面}
% \begin{macro}{\nuaa@make@cover@bachelor}
% 本科封面布局的难点，在于正中间的题目，和下方的论文信息，
% 虽然这两部分都用表格来布局，但实现方法是完全不同的。
%
% 题目部分是一行两列的表格，左边的“题目”二字水平居中+垂直居中；
% 右侧是论文的题目，如果不是中文论文的话，还要写上原文的题目。
% 原本想用 \pkg{tabu} 来排版的，不过它没法指定列宽，并且与新版的 \pkg{array} 不兼容，
% 导致没法垂直居中，即使是在网上找到的例子 \footnote{\url{https://tex.stackexchange.com/a/26214}}，
% 编译出来的结果与网上给出的截图不一样，所以只好改用 \pkg{array} 的 \env{tabular}。
% 虽然 \env{tabular} 默认垂直居中，但水平居中并不能直接套用 \env{center} 环境，或者用 \cs{centering}，
% 它们都要在最后加上 \cs{par}，结果会在表格里增加一个空行，导致左侧的“标题”二字与右侧不垂直居中。
% 最后仍然需要定义新的列类型。
% 原本打算完全照用 Word 里的单元格宽度的，但它超过了页边距，所以稍作裁剪。
%
% 下方的论文信息就相对简单一些，用 \env{tabular} 环境绘制了 6~行2~列 的表格，右侧的格子下面划线。
% 为了设置最小列宽，这里用了一点 hacking 的方法，给“班级”的值套上了固定宽度的 \cs{makebox}。
% \cs{makebox}不会扩展宽度，但“班级”的值基本都是7~位数字，所以应该没问题吧。
% 如果“指导教师”很长，\env{tabular} 会加宽表格的列宽，整个表格仍然保持居中。
%
% 剩余的部分只需要按照 Word 模板设置字体字号，然后多余的垂直空间按比例填上空格。
% 如果“题目”过长导致换行，模板会均匀地从多余的空间里抽出等比例的空间给标题用，
% 不用像 Word 模板那样手工调整，也不用担心底部的日期跑到后一页去。
%
% \changes{v2.1b}{2018/12/26}{修正 \pkg{array} 更新导致 \pkg{tabu} 与 \pkg{floatrow} 不兼容的问题}
%    \begin{macrocode}
\newcommand\nuaa@make@cover@bachelor{
  \cleardoublepage
  \linespread{1}\fontsize{12bp}{15.874bp}\selectfont

  \begin{flushright}
    \sffamily\heiti\fontsize{15bp}{31.748bp}\selectfont
    \setlength\arrayrulewidth{.75bp}
    \begin{tabular} {cc}
      \nuaa@label@thesisnum & \makebox[1.6in]{\nuaa@value@thesisid} \\ \cline{2-2}
    \end{tabular}
  \end{flushright}
  \vspace{20bp}
  \begin{center}
    \begin{tabular}{c}
    \secretize{
      \raisebox{4.011bp}{\includegraphics[height=0.55in]{nuaa-logo-black.pdf}}\hspace{12bp}
      \raisebox{10.401bp}{\includegraphics[height=.4in]{nuaa.pdf}}
     } \\
    \includegraphics{bachelor-title.pdf} \\
    \end{tabular}
  \end{center}
  \vspace{\stretch{1}}

  \begin{center}
    \linespread{1}\fontsize{22bp}{31.748bp}\selectfont
    \begin{tabular}{C{1.48in}C{4.81in}}
    {\sffamily\heiti\nuaa@label@title} &
    \ifnuaa@lang@ja
      {\sffamily\gtfamily\nuaa@valueJa@title \par}
    \else\ifnuaa@lang@en
      {\rmfamily\nuaa@valueEn@title \par}
    \fi\fi
    {\sffamily\heiti\nuaa@value@title}
    \end{tabular}
    \vspace{\stretch{1}}
    \vspace{47.622bp}

    \sffamily\heiti\fontsize{15bp}{.51in}\selectfont
    \setlength\arrayrulewidth{.5bp}
    \begin{tabular} {cc}
      \nuaa@label@author & \nuaa@value@author \\ \cline{2-2}
      \nuaa@label@studentid & \nuaa@value@studentid \\ \cline{2-2}
      \nuaa@label@college & \nuaa@value@college \\ \cline{2-2}
      \nuaa@label@major & \nuaa@value@major \\ \cline{2-2}
      \nuaa@label@classid & \makebox[2.59in]{\nuaa@value@classid} \\ \cline{2-2}
      \nuaa@label@adviser & \nuaa@value@advisers \\ \cline{2-2}
      \ifdefempty{\nuaa@value@industrialadvisers}{}{%
      \nuaa@label@industrialadviser & \nuaa@value@industrialadvisers \\ \cline{2-2}}
    \end{tabular}
    \vspace{31.748bp}

    \sffamily\heiti\fontsize{15bp}{31.748bp}
    \ifdefempty{\nuaa@value@applydate}{\nuaa@dateCn}{\nuaa@value@applydate}
  \end{center}
  \restoregeometry
}
%    \end{macrocode}
% \end{macro}
% \subsubsection{本科承诺书}
% \begin{macro}{\nuaa@make@declare@bachelor}
% “这个页面没有特殊的格式”，原本是这么想的，但现实很复杂。坑在那个下划线上。
% \TeX 原本不支持下划线，\LaTeX 自带的 \cs{underline} 无法使下划线的英文换行，
% 推荐的方法使用来自 \pkg{ulem} 的 \cs{uline}，但它没法处理宏，必须手动把宏展开，
% 如代码中的\cs{expandafter} 所示。
% 但这个方法仍然不适用 up\LaTeX{} 环境，解决方法参见外文特辑中的已知问题。
%
%
% 由于本页面会出现在所有语言的论文中，所以要单独设置中文的段落缩进。
%    \begin{macrocode}
\newcommand\nuaa@datefield{%
  \dunderline{.5bp}{20\hspace{24bp}} 年%
  \dunderline{.5bp}{\hspace{24bp}} 月%
  \dunderline{.5bp}{\hspace{24bp}} 日}
\newcommand\nuaa@make@declare@bachelor{
  \cleardoublepage
  %\@makeschapterhead\relax\vskip -40pt

  \begin{center}
    \linespread{1.0}\heiti\fontsize{15bp}{31.748bp}\selectfont
    \nuaa@university \par
    本科毕业设计（论文）诚信承诺书
  \end{center}

  \begingroup
    \linespread{1.0}\songti\fontsize{12bp}{23.811bp}\selectfont
    \setlength\parindent{2\ccwd}\indent
    本人郑重声明：所呈交的毕业设计（论文）是本人在导师的指导下独立进行研究所取得的成果。
    尽我所知，除了文中特别加以标注和致谢的内容外，
    本设计（论文）不包含任何其他个人或集体已经发表或撰写的成果作品。
    对本设计（论文）所涉及的研究工作作出贡献的其他个人和集体，均已在文中以明确方式标明。

    \par

    \begin{flushright}
      \linespread{1.0}\fontsize{12bp}{.59in}\selectfont
      \setlength{\tabcolsep}{0pt}
      \begin{tabular}{cl}
      \makebox[5\ccwd][c]{作者签名：} & \hspace{2.17in} \\ \cline{2-2}
      \makebox[5\ccwd][c]{日\hfill 期 ：} & \nuaa@datefield \\
      \end{tabular}
    \end{flushright}

  \endgroup

  \vspace{\stretch{1}}

  \begin{center}
    \linespread{1.0}\heiti\fontsize{15bp}{31.748bp}\selectfont
    \par\par
    \nuaa@university \par
    毕业设计（论文）使用授权书
  \end{center}

  \begingroup
    \linespread{1.0}\songti\fontsize{12bp}{23.811bp}\selectfont
    \setlength\parindent{2\ccwd}\indent
    本人完全了解\nuaa@university{}有关收集、保留和使用本人所送交的毕业设计（论文）的规定，
    即：本科生在校攻读学位期间毕业设计（论文）工作的知识产权单位属\nuaa@university{}。
    学校有权保留并向国家有关部门或机构送交毕业设计（论文）的复印件和电子版，
    允许论文被查阅和借阅，可以公布论文的全部或部分内容，
    可以采用影印、缩印或扫描等复制手段保存、汇编论文。保密的论文在解密后适用本声明。

    论文涉密情况：

    $\square$ 不保密

    $\square$ 保密，保密期（起讫日期：\hspace{131bp}）

    \begin{center}
      \linespread{1.0}\fontsize{12bp}{.59in}\selectfont
      \setlength{\tabcolsep}{0pt}
      \begin{tabular}{clccl}
      \makebox[5\ccwd][c]{作者签名：} & \hspace{2.17in} & \makebox[.2in]{} &
      \makebox[5\ccwd][c]{导师签名：} & \hspace{2.17in} \\ \cline{2-2} \cline{5-5}
      \makebox[5\ccwd][c]{日\hfill 期 ：} & \nuaa@datefield & &
      \makebox[5\ccwd][c]{日\hfill 期 ：} & \nuaa@datefield \\
      \end{tabular}
    \end{center}

  \endgroup

  \vspace{\stretch{1}}
}
%    \end{macrocode}
% \end{macro}
% \subsubsection{本科摘要}
% \begin{macro}{\nuaa@make@abstract@bachelor@cn}
% 本科的中文摘要页。往上回退一空行，是为了删除段首的英文空格。
%    \begin{macrocode}
\newcommand\nuaa@make@abstract@bachelor@cn{
  \clearpage

  \chapter*{\heiti\nuaa@label@abstract}

  \begingroup
    \setlength\parindent{2\ccwd}\songti\indent
    \vspace{-1\baselineskip}

    \nuaa@abstract
  \endgroup

  \vspace{23.811bp minus 20bp}

  \nuaa@put@kw{\heiti\zihao{-3}\nuaa@label@keywords}{\songti\nuaa@keywords}
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\nuaa@make@abstract@bachelor@en}
% 本科的英文摘要页。
%    \begin{macrocode}
\newcommand\nuaa@make@abstract@bachelor@en{
  \clearpage

  \chapter*{\textbf{\textrm{\nuaa@labelEn@ABSTRACT}}}

  \begingroup
    \setlength\parindent{1em}\rmfamily\songti
    \nuaa@abstractEn
  \endgroup

  \vspace{23.811bp minus 20bp}

  \nuaa@put@kw{\zihao{-3}\nuaa@labelEn@KeyWords}{\nuaa@keywordsEn}
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\nuaa@make@abstract@bachelor@ja}
% 本科的英文摘要页。
%    \begin{macrocode}
\newcommand\nuaa@make@abstract@bachelor@ja{
  \clearpage

  \chapter*{\nuaa@labelJa@abstract}

  \begingroup
    \setlength\parindent{1em}\rmfamily\mcfamily
    \nuaa@abstractJa
  \endgroup

  \vspace{23.811bp minus 20bp}

  \nuaa@put@kw{\nuaa@textbf{\zihao{-3}\nuaa@labelJa@keywords}}{\nuaa@keywordsJa}
}
%    \end{macrocode}
% \end{macro}
% \subsubsection{硕/博士封面}
% \begin{macro}{\nuaa@make@cover@master@cn}
% 硕/博士中文封面，难点比本科的封面少一个，只要把论文信息排好就行。
% \sout{由于用了 \env{tabu}，导师名字再长、要写两个导师都没问题。}
%
% 还是没有想象中简单，\pkg{tabu} 虽然很诱人，但实在不可靠，
% 所以改用 \env{tabular} 的实现，仍然可以写多个导师的名字，
% 但是表格宽度是固定的，不会自动调整，
% 所有数字均是精确计算得出。
% 整个 \env{tabular} 将占满整个页宽（$\SI{8.27}{inch} - \SI{30}{\mm} - \SI{28}{\mm}$），
% 标签左侧空白宽度为 1\sfrac{1}{8}~inch，标签本身宽度为 $5\times \SI{16}{pt}$，
% 右侧内容起始位置为 2\sfrac{7}{8}~inch，做一下单位换算和加减法就得到下面的代码。
%
% 另一个问题的是简启体的校名。首先，百度上确实有一个字体的全称叫“迷你简启体”，
% 但稍再搜索下的话，不难发现这“迷你简启体”是“广捷居”对“方正启体简体”精简衍生版本。
% 这里不打算讨论版权问题，只从使用的角度出发，如果所有用户都要安装这一字体
% 并在 \LaTeX 中使用，无疑会加大使用难度；本模板将所需的字形存放在 |pdf| 文件中，
% 当作普通的图片插入封面中，能大幅降低使用难度，避免修改系统设置，并且尽可能规避版权问题。
%
% \changes{v2.1b}{2018/12/03}{添加专硕封面}
% \changes{v2.1b}{2018/12/26}{修正多个指导教师产生的对齐问题}
%    \begin{macrocode}
\newcommand\nuaa@make@cover@master@cn{
  \cleardoublepage

  \begin{multicols}{2}
    \linespread{1}\songti\fontsize{10.5bp}{15.6bp}\selectfont
    \begin{flushleft}
      中图分类号：\nuaa@value@libraryclassid \par
      学科分类号：\nuaa@value@subjectclassid
    \end{flushleft}
    \columnbreak
    \begin{flushright}
      论文编号：\nuaa@value@thesisid
    \end{flushright}
  \end{multicols}
  \vspace{\stretch{2}}

  \begin{center}
    \linespread{1}\songti\fontsize{42bp}{62.4bp}\selectfont\nuaa@worktypecn
    \vspace{\stretch{2}}

    \linespread{1}\sffamily\heiti\fontsize{26bp}{46.8bp}\selectfont\nuaa@value@title
  \end{center}
  \vspace{\stretch{3}}

  \begin{center}
  \linespread{1}\rmfamily\songti\fontsize{16bp}{31.2bp}\selectfont
  \renewcommand\linebreak{\par}
  \begin{tabular} {@{\hskip 1.125in}c@{\hskip .6389in}p{3.0in}}
    \nuaa@label@researchername & \nuaa@value@author \\
\ifnuaa@zhuanshuo
    \nuaa@label@professionaltype & \nuaa@value@majorsubject \\
    \nuaa@label@professionalfield & \nuaa@value@researchfield \\
\else
    \nuaa@label@majorsubject & \nuaa@value@majorsubject \\
    \nuaa@label@researchfield & \nuaa@value@researchfield \\
\fi
    \nuaa@label@adviser & \nuaa@value@advisers \\
  \end{tabular}
  \end{center}
  \vspace{\stretch{3}}

  \begin{center}
    \linespread{1}
    \kaishu\fontsize{18bp}{31.2bp}\selectfont
    \secretize{\includegraphics{nuaa-jianqi.pdf}}

    \kaishu\fontsize{18bp}{31.2bp}\selectfont
    \secretize{\nuaa@label@graduateschool\quad \nuaa@value@college}

    \kaishu\fontsize{16bp}{31.2bp}\selectfont
    \ifdefempty{\nuaa@value@applydate}{\nuaa@dateCn}{\nuaa@value@applydate}

  \end{center}
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\nuaa@make@cover@master@en}
% 硕/博士英文封面。值得一提的是，正是学校 Word 模板的这一页，
% 导致了本模板 |v2.1| 放弃完美复刻 Word 模板的方针。
%
% 原因在于本页标题下面的三段字，加起来一共11~行，原 Word 模板换了5~次格式。
% 用空行来增加行间距、对齐到文档网络随意改，
% 笔者实在解读不出原模板作者的意图，以及ta预期的格式。
% 这种毫无逻辑的格式转变，让笔者觉得原模板作者根本不会在意数~pt 的误差，
% 刻意去复现原模板无逻辑的格式变化是没有意义的。
% 因此笔者按自己对排版的理解，实现了原模板的主体格式。
% \changes{v2.1c}{2018/12/27}{改正 sumbrez 指出的 typo: \sout{fullfillment}}
%    \begin{macrocode}
\newcommand\nuaa@make@cover@master@en{
  \cleardoublepage

  \begin{center}
    \linespread{1.5}\fontsize{14bp}{14bp}\rmfamily\selectfont
    \secretize{\nuaa@labelEn@nuaa} \par
    \secretize{\nuaa@labelEn@graduateschool} \par
    \nuaa@valueEn@college \vspace{\stretch{1}}

    \linespread{1}\fontsize{22bp}{31.2bp}\rmfamily\selectfont
    \ifnuaa@lang@ja
      \jpn{\nuaa@textbf{\nuaa@valueJa@title}}
    \else
      \nuaa@textbf{\nuaa@valueEn@title}
    \fi \par \vspace{\stretch{1}}

    \linespread{1.75}\fontsize{14bp}{16.8bp}\rmfamily\selectfont
    A Thesis in \\
    \nuaa@valueEn@majorsubject \\
    by \\
    \nuaa@valueEn@author \\
    Advised by \\
    \nuaa@valueEn@advisers \par \bigskip

    Submitted in Partial Fulfillment \\
    of the Requirements \\
    for the Degree of \\
    \nuaa@valueEn@degreefull \par\bigskip

    \ifdefempty{\nuaa@valueEn@applydate}{\nuaa@dateEn}{\nuaa@valueEn@applydate}
  \end{center}
}
%    \end{macrocode}
% \end{macro}
% \subsubsection{硕/博士承诺书}
% \begin{macro}{\nuaa@make@declare@master}
% 与本科类似，需要保证在非中文环境下，保持本页中文排版格式。
%    \begin{macrocode}
\newcommand\nuaa@make@declare@master{
  \cleardoublepage

  \begin{center}
  \linespread{1.0}\songti\fontsize{22bp}{62.4bp}\selectfont
  \vspace*{25.5bp} \vspace{-\parskip}\vspace{-\baselineskip}
  承诺书 \par
  \end{center}

  \begingroup
  \vspace*{31.4bp} \vspace{-\parskip}\vspace{-\baselineskip}
  \linespread{1.0}\rmfamily\songti\fontsize{16bp}{30bp}\selectfont
  \setlength\parindent{2\ccwd}

  本人声明所呈交的\nuaa@worktypecn 是本人在导师指导下进行的研究工作及取得的研究成果。
  除了文中特别加以标注和致谢的地方外，论文中不包含其他人已经发表或撰写过的研究成果，
  也不包含为获得\secretize{\nuaa@label@nuaa} 或其他教育机构的学位或证书而使用过的材料。

  本人授权\secretize{\nuaa@label@nuaa} 可以将学位论文的全部或部分内容编入有关数据库进行检索，
  可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。

  （保密的学位论文在解密后适用本承诺书）

  \endgroup

  \vfill
  \begin{flushright}
  \linespread{1.0}\songti\fontsize{14bp}{25bp}\selectfont
  \makebox[5\ccwd][c]{作者签名：} \underline{\hspace{7em}} \par
  \makebox[5\ccwd][c]{日 \hfill 期：} \underline{\hspace{7em}} \par
  \end{flushright}
  \vfill
}
%    \end{macrocode}
% \end{macro}
% \subsubsection{硕/博士摘要页}
% 与本科稍微不同的是，为了避免摘要页因内容过多，导致只有关键词被溢出到下一页，
% 这里在垂直空格上加了一些胶水。对胶水不熟悉的读者可以去读一下 \textit{The \TeX book} 的第12章。
% \begin{macro}{\nuaa@make@abstract@master@cn}
% 硕/博士中文摘要页
%    \begin{macrocode}
\newcommand\nuaa@make@abstract@master@cn{
  \ifnuaa@abstractopenright
    \cleardoublepage
  \else
    \clearpage
  \fi

  \chapter*{\heiti\nuaa@label@abstract}

  \begingroup
    \setlength\parindent{2\ccwd}
    \rmfamily\songti\indent

    \nuaa@abstract
  \endgroup
  \vskip 2\baselineskip minus 1.5\baselineskip

  \nuaa@put@kw{\nuaa@textbf{\songti\nuaa@label@keywords}}{\songti\nuaa@keywords}
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\nuaa@make@abstract@master@en}
% 硕/博士英文摘要页
%    \begin{macrocode}
\newcommand\nuaa@make@abstract@master@en{
  \ifnuaa@abstractopenright
    \cleardoublepage
  \else
    \clearpage
  \fi

  \chapter*{\textrm{\nuaa@textbf{\nuaa@labelEn@ABSTRACT}}}

  \begingroup
    \setlength\parindent{1em}
    \nuaa@abstractEn
  \endgroup
  \vskip 2\baselineskip minus 1.5\baselineskip

  \nuaa@put@kw{\nuaa@textbf{\nuaa@labelEn@keywords}}{\nuaa@keywordsEn}
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\nuaa@make@abstract@master@ja}
% 硕/博士日文摘要页
%    \begin{macrocode}
\newcommand\nuaa@make@abstract@master@ja{
  \ifnuaa@abstractopenright
    \cleardoublepage
  \else
    \clearpage
  \fi

  \chapter*{\nuaa@textbf{\mcfamily\nuaa@labelJa@abstract}}

  \begingroup
    \nuaa@abstractJa
  \endgroup
  \vskip 2\baselineskip minus 1.5\baselineskip

  \nuaa@put@kw{\nuaa@textbf{\nuaa@labelJa@keywords}}{\nuaa@keywordsJa}
}
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</cls>
%    \end{macrocode}

% \iffalse
% 以下为文档的样式，内容不会出现在文档中
%    \begin{macrocode}
%
%<*dtx-style>
\ProvidesPackage{dtx-style}
\RequirePackage[bottom,perpage,hang,]{footmisc}
\RequirePackage{hypdoc}
\PassOptionsToPackage{no-math}{fontspec}
\RequirePackage{amsmath}
\RequirePackage{ulem}
\RequirePackage[UTF8,scheme=chinese]{ctex}
\RequirePackage{newpxtext}
\RequirePackage{newpxmath}
\RequirePackage[
top=2.5cm, bottom=2.5cm,
left=4cm, right=2cm,
headsep=3mm]{geometry}
\RequirePackage{array,longtable,booktabs}
\RequirePackage{float}
\RequirePackage{listings}
\RequirePackage{fancyhdr}
\RequirePackage{xcolor}
\RequirePackage{enumitem}
\RequirePackage{etoolbox}
\RequirePackage{metalogo}
\RequirePackage{graphicx}
\RequirePackage{xspace}
\RequirePackage{pifont}
\RequirePackage{siunitx}
\RequirePackage{xfrac}

\def\footnoterule{\vskip-3\p@\hrule\@width0.3\textwidth\@height0.4\p@\vskip2.6\p@}
\let\cqu@footnotesize\footnotesize
\renewcommand{\footnotesize}{\cqu@footnotesize\zihao{-5}}
\footnotemargin1.5em\relax

\let\cqu@makefnmark\@makefnmark
\def\cqu@@makefnmark{\mbox{{\normalfont\@thefnmark}}}
\pretocmd{\@makefntext}{\let\@makefnmark\cqu@@makefnmark}{}{}
\apptocmd{\@makefntext}{\let\@makefnmark\cqu@makefnmark}{}{}

\colorlet{cqu@macro}{blue!60!black}
\colorlet{cqu@env}{blue!70!black}
\colorlet{cqu@option}{purple}
%\patchcmd{\PrintMacroName}{\MacroFont}{\MacroFont\bfseries\color{cqu@macro}}{}{}
%\patchcmd{\PrintDescribeMacro}{\MacroFont}{\MacroFont\bfseries\color{cqu@macro}}{}{}
%\patchcmd{\PrintDescribeEnv}{\MacroFont}{\MacroFont\bfseries\color{cqu@env}}{}{}
%\patchcmd{\PrintEnvName}{\MacroFont}{\MacroFont\bfseries\color{cqu@env}}{}{}

\def\DescribeOption{%
    \leavevmode\@bsphack\begingroup\MakePrivateLetters%
    \Describe@Option}
\def\Describe@Option#1{\endgroup
    \marginpar{\raggedleft\PrintDescribeOption{#1}}%
    \cqu@special@index{option}{#1}\@esphack\ignorespaces}
\def\PrintDescribeOption#1{\strut \MacroFont\bfseries\sffamily\color{cqu@option} #1\ }
\def\cqu@special@index#1#2{\@bsphack
    \begingroup
    \HD@target
    \let\HDorg@encapchar\encapchar
    \edef\encapchar usage{%
        \HDorg@encapchar hdclindex{\the\c@HD@hypercount}{usage}%
    }%
    \index{#2\actualchar{\string\ttfamily\space#2}
        (#1)\encapchar usage}%
    \index{#1:\levelchar#2\actualchar
        {\string\ttfamily\space#2}\encapchar usage}%
    \endgroup
    \@esphack}

\lstdefinestyle{lstStyleBase}{%
    basicstyle=\small\ttfamily,
    aboveskip=\medskipamount,
    belowskip=\medskipamount,
    lineskip=0pt,
    boxpos=c,
    showlines=false,
    extendedchars=true,
    upquote=true,
    tabsize=2,
    showtabs=false,
    showspaces=false,
    showstringspaces=false,
    numbers=none,
    linewidth=\linewidth,
    xleftmargin=4pt,
    xrightmargin=0pt,
    resetmargins=false,
    breaklines=true,
    breakatwhitespace=false,
    breakindent=0pt,
    breakautoindent=true,
    columns=flexible,
    keepspaces=true,
    gobble=2,
    framesep=3pt,
    rulesep=1pt,
    framerule=1pt,
    backgroundcolor=\color{gray!5},
    stringstyle=\color{green!40!black!100},
    keywordstyle=\bfseries\color{blue!50!black},
    commentstyle=\slshape\color{black!60}}

\lstdefinestyle{lstStyleShell}{%
    style=lstStyleBase,
    frame=l,
    rulecolor=\color{blue},
    language=bash}

\lstdefinestyle{lstStyleLaTeX}{%
    style=lstStyleBase,
    frame=l,
    rulecolor=\color{cyan},
    language=[LaTeX]TeX}

\lstnewenvironment{latex}{\lstset{style=lstStyleLaTeX}}{}
\lstnewenvironment{shell}{\lstset{style=lstStyleShell}}{}

\setlist{nosep}

\DeclareDocumentCommand{\option}{m}{\textsf{#1}\xspace}
\DeclareDocumentCommand{\env}{m}{\texttt{#1}\xspace}
\DeclareDocumentCommand{\mac}{m}{\texttt{\textbackslash#1}\xspace}
\DeclareDocumentCommand{\pkg}{s m}{%
    \texttt{#2}\xspace\IfBooleanF#1{\cqu@special@index{package}{#2}}}
\DeclareDocumentCommand{\file}{s m}{%
    \texttt{#2}\xspace\IfBooleanF#1{\cqu@special@index{file}{#2}}}
\newcommand{\myentry}[1]{%
    \marginpar{\raggedleft\color{purple}\bfseries\strut #1}}
\newcommand{\note}[1]{{%
        \color{magenta}{\noindent\bfseries 说明：}\emph{#1}}}
\newcommand{\warn}[1]{{%
        \color{red}{\noindent\bfseries 警告：}\emph{#1}}}
\DeclareDocumentCommand{\cls}{m}{\texttt{#1}\xspace}

\setlength\IndexMin{100pt}
%</dtx-style>
%<*dtx-style|cls>
\newcommand{\nuaathesis}{%
  \makebox{\rmfamily%
    N\hspace{-0.3ex}\raisebox{-0.5ex}{U}\hspace{-0.3ex}A\mbox{\textsuperscript{\hspace{-0.5ex}2}}\hspace{0.3ex}%
    \textsc{Thesis}}}
\newcommand{\oldnuaathesis}{%
  N\raisebox{0.5ex}{U}\hspace{-0.3ex}AA%
  \textsc{Thesis}
}
\newcommand{\seuthesix}{%
  \makebox{S\hspace{-0.3ex}\raisebox{-0.5ex}{E}\hspace{-0.3ex}U\hspace{0.1em}%
  \textsc{Thesix}}
}
\newcommand\cquthesis{\textsc{Cqu}\-\textsc{Thesis}}
%</dtx-style|cls>
%    \end{macrocode}
% \fi
%\Finale
